Java基础知识全面总结

 第一章:类与对象

第一课:什么是面向对象编程

1.面向对象编程和面向过程编程的区别

  无论是面向过程编程还是面向对象编程都是用于解决一个实际问题,当面向过程编程在解决一个问题时,更多的情况下是不会做出重用的设计思考的;而面向对象的设计形式为模块化设计,并且可以进行重用配置,在整个面向对象的设计里面更多考虑的是标准。

2.面向对象设计的三个主要特征

封装性:内部的操作对外部来说不可见,当内部的操作都不可以直接使用的时候才是安全的。

继承性:在已有的结构基础上继续对功能进行扩充

多态性:是在继承性的基础上扩充的概念,指的是类型的转换处理。

第二课:类与对象

1.类与对象的概念

类是对某一类事物共性的抽象概念,而对象描述的是一个具体的产物。先有类后有对象。

例:人可以看成是一个类,小学生李明就是一个对象。

2.类的组成

成员属性(Field):可简化为属性

例:一个人的年龄,身高,体重

操作方法(Method):定义对象具有的处理行为

例:一个人可以游泳,唱歌。跳舞

第三课:类与对象的定义与使用

1.类的定义

范例:

//定义一个类
class Person{
    private String name;//类的成员属性姓名
    private int age;//类的成员属性年龄

    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

在范例中定义了一个类Person,类里面定义了成员属性name(姓名),age(年龄),以及类的操作方法Tell(输出成员属性)。

2.对象的定义

方法一:类的名称 对象名称=new 类的名称();

方法二:类的名称 对象名称=null;

对象名称=new 类的名称();(推荐使用)

范例:

//对象的定义方式一
Person person=new Person();
//对象的定义方式二
Person person1=null;
person1=new Person();

3.类与对象的使用

范例:

//对象的定义方式一
Person person=new Person();
//给对象1赋值
person.name="李明";
person.age=18;
//使用对象1调用类的方法
person.Tell();
//对象的定义方式二
Person person1=null;
person1=new Person();
//给对象2赋值
person1.name="张三";
person1.age=20;
//使用对象2调用类的方法
person1.Tell();

4.完整代码

public class Main {
    public static void main(String[] args) {
        //对象的定义方式一
        Person person=new Person();
        //给对象1赋值
        person.name="李明";
        person.age=18;
        //使用对象1调用类的方法
        person.Tell();
        //对象的定义方式二
        Person person1=null;
        person1=new Person();
        //给对象2赋值
        person1.name="张三";
        person1.age=20;
        //使用对象2调用类的方法
        person1.Tell();
    }
}
//定义一个类
class Person{
    public String name;//类的成员属性姓名
    public int age;//类的成员属性年龄
    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

输出结果:

第四课:对象内存分析

Java中的类属于引用数据类型,引用数据类型主要保存在堆内存和栈内存中。

堆内存:保存引用数据类型的具体对象信息;堆内存的空间开辟是通过new关键字进行的。

栈内存:保存的是堆内存的地址信息;即通过地址信息找到堆内存,而后找到对象的具体内容。

范例:

1.对象的定义方式一

//对象的定义方式一
Person person=new Person();
//给对象1赋值
person.name="李明";
person.age=18;
//使用对象1调用类的方法
person.Tell();

分析:代码“Person person=new Person();”中new Person()开辟了一个堆内存空间,代码“Person person”把开辟的堆内存的地址信息以person为名称存入在栈内存中(见下图)。

代码“person.name="李明";person.age=18;”是以栈内存中名称为person的对象所代表的地址在堆内存中寻找地址,并给地址内的具体信息赋值。

2.对象的定义方式二

//对象的定义方式二
Person person1=null;
person1=new Person();
//给对象2赋值
person1.name="张三";
person1.age=20;
//使用对象2调用类的方法
person1.Tell();

内存分析:代码“Person person1=null;”是先开辟一个栈内存名称为person1,但这个时候person1并没有指向任何堆内存空间(图一),这个时候对象person1不能给对象信息赋值,否者会报指针异常。只有当代码“person1=new Person();”执行后,person1才能指向具体的堆内存空间(图二)。给对象赋值的内存结构流程基本方法与方式一相同。

第五课:对象引用分析

1.引用传递(方式一)

代码:

 Person person=new Person();
 //给对象person赋值
 person.name="李明";
 person.age=18;
 //引用传递
 Person person1=person;
person1.age=80;
person.Tell();

输出结果:

分析:代码“ Person person=new Person();”表示在堆内存中开辟了一片内存空间,在栈内存中有一个person指向开辟的堆内存。代码“ person.name="李明";person.age=18;”给推内存中的对象信息赋值,代码“ Person person1=person;”表示把对象person所指向的堆内存地址赋值给person1,那么person1和person就指向同一片堆地址空间;代码“person1.age=80;”是利用栈内存对象person1修改对应的堆内存的对象信息。此过程结束后person和person1都会指向同一片地址空间。

2.引用传递(方式二)

代码:

 public static void main(String[] args) {
        Person person=new Person();
        //给对象person赋值
        person.name="李明";
        person.age=18;
        //引用传递
//        Person person1=person;
       tempPerson(person);
       person.Tell();
    }
    public static void tempPerson(Person person1){
  person1.age=80;
    }
}

输出结果:

方式二是通过方法用参数进行引用传递,与方式一不同的是,方法结束后,person1指向堆内存的连线会断开,也就等于person1只有在方法中才会指向堆内存。

完整代码:

public class Main {
    public static void main(String[] args) {
        Person person=new Person();
        //给对象person赋值
        person.name="李明";
        person.age=18;
        //引用传递
//        Person person1=person;
       tempPerson(person);
       person.Tell();
    }
    public static void tempPerson(Person person1){
  person1.age=80;
    }
}
//定义一个类
class Person{
    public String name;//类的成员属性姓名
    public int age;//类的成员属性年龄
    /**
     * 类的方法,输出姓名和年龄
     */
    public void Tell(){
        System.out.println(age+"  "+name);
    }
}

第六课:引用与垃圾产生分析

垃圾的产生:所谓的垃圾空间指的是没有栈内存指向的堆内存空间就是垃圾空间;所有的垃圾空间会被GC(垃圾收集器)不定期回收。

范例:

代码:

 Person person1=new Person();
 //给对象person1赋值
 person1.name="李明";
 person1.age=18;
 Person person2=new Person();
 person2.name="张三";
 person2.age=20;
 person2=person1;
 person2.age=50;
person1.Tell();

分析:这段代码分定义了类Person的两个实例person1和person2,并给两个实例都做了赋值,接着把person1的值赋给person2,赋值后的person2就不再指向原地址,而是和person1指向同一地址,原来的地址空间就变成了垃圾空间。

输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/889756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555

蓝桥杯【物联网】零基础到国奖之路:十七. 扩展模块之单路ADC和NE555 第一节 硬件解读第二节 CubeMx配置第三节 代码1,脉冲部分代码2,ADC部分代码![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/57531a4ee76d46daa227ae0a52993191.png) 第一节 …

pytorh学习笔记——波士顿房价预测

机器学习的“hello world”:波士顿房价预测 波士顿房价预测的背景不用提了,简单了解一下数据集的结构。 波士顿房价的数据集,共有506组数据,每组数据共14项,前13项是影响房价的各种因素,比如&…

Nullinux:一款针对Linux操作系统的安全检测工具

关于Nullinux Nullinux是一款针对Linux操作系统的安全检测工具,广大研究人员可以利用该工具针对Linux目标设备执行网络侦查和安全检测。 该工具可以通过SMB枚举目标设备的安全状况信息,其中包括操作系统信息、域信息、共享信息、目录信息和用户信息。如…

第四次论文问题知识点及问题

1、NP-hard问题 NP-hard,指所有NP问题都能在多项式时间复杂度内归约到的问题。 2、启发式算法 ‌‌启发式算法(heuristic algorithm)是相对于最优化算法提出的。它是一种基于直观或经验构造的算法,旨在以可接受的花费给出待解决…

『网络游戏』进入游戏主城UI跳转主城【26】

首先在Unity客户端中创建一个空节点重命名为MainCityWnd 设置父物体为全局 创建空节点钉在左上角作为角色信息UI 在钉子下创建Image 创建脚本:MainCityWnd.cs 编写脚本:MainCityWnd.cs 挂载脚本 创建脚本:MainCitySys.cs 编写脚本&#xff1a…

Java中二维数组-杨辉三角

使用二维数组打印一个10行杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1)第一行有1个元素,第n行有n个元素 2)每一行的第一个元素和最后一个元素都是1 3)从第三行开始,对于非第一个元素和最后一个元素的元素…

商贸物流痛点解析

商贸物流痛点解析 在当今全球化的商业环境中,商贸与物流之间的紧密协作已成为业务成功的关键因素。然而,许多组织面临着信息不对称、资源配套不足以及系统间隔离等痛点,这些问题严重阻碍了商贸体系与物流、仓储和园区的有效联动,…

[mysql]多表查询详解

我们如果要查询,我们就要用 SELECT .... FROM .... WHERE AND/OR/NOT #我们需要用过滤的条件来对数据进行筛选,不然会有很多多余数据 ORDER BY (ASC/DESC)#排序 LIMIT....,#是在几个有限的数据库管理系统里所以,PGsql,mysql,等 多表查询的意义 我们目前为止的查询语句…

linux 安装gitlab

安装环境 CentOS 7.7 (centos6.10会报错)2g内存防火墙关闭 安装步骤: 1 安装gitlab # yum install -y git curl policycoreutils-python openssh-server # 安装依赖 # wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce…

IPv 4

IP协议 网络层主要由IP(网际协议)和ICMP(控制报文协议)构成,对应OSI中的网络层,网络层以实现逻辑层面点对点通信为目的。目前应用最广泛的IP协议为IPv4 基本概念给出 主机:配有IP地址但不具有路…

【原创】java+springboot+mysql劳动教育网系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

【数据结构-栈】【贪心】力扣2434. 使用机器人打印字典序最小的字符串

给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串: 删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。 删除字符串 t 的 最后一个 …

让AI像人一样思考和使用工具,reAct机制详解

reAct机制详解 reAct是什么reAct的关键要素reAct的思维过程reAct的代码实现查看效果引入依赖,定义模型定义相关工具集合工具创建代理启动测试完整代码 思考 reAct是什么 reAct的核心思想是将**推理(Reasoning)和行动(Acting&…

SDH8303直插DIP8,7W-12W非隔离升压降压转换器

SDH8303是用于开关电源的内置高压 MOSFET 的电流模式 PWM 控制器,采用DIP-8封装,全电压下典型功率7W-12W。 SDH8303芯片内置高压启动电路,在轻载下会进入打嗝模式,具有降频、抖频、软启动、VDD 打嗝功能,还集成了 VDD …

猿人学 — 第1届第17题(解题思路附源码)

猿人学 — 第1届第17题 根据题目“天杀的Http2.0”大概知道,请求的协议应该遵照的是Http2.0协议,并且目标网站专门对此进行了检测,在Network面板中右键表头,勾选Protocol 果不其然,一堆请求都是遵照Http2.0协议。而u…

论文阅读 BLIP-2

Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 使用冻结的图像编码器和大型语言模型进行语言-图像预训练的引导 BLIP-2 通过一个轻量级的查询变换器弥合了模态之间的差距。 Querying Transformer 第一阶段通过冻结的图像编…

Word排版 | 如何文字部分固定行距、图片(嵌入型)单倍行距

问题描述 在写一个要求比较高的项目报告,总共有109页 89张图片,而且必须用word写 因此: 文字部分需要固定行距23磅图片部分需要单倍行距(不然无法使用嵌入式) 难点 文字和图片难以有效分离,无法分别设…

3D渲图软件推荐:打造高质量渲染效果

在现代设计领域,3D渲图已经成为展示设计方案和产品外观的重要手段。无论是建筑设计、产品设计还是影视动画,都需要借助专业的3D渲染图软件来实现逼真的视觉效果。 本文将为您介绍几款备受好评的3D渲染图软件,帮助您在项目中选择合适的工具。…

筛选因数快速法+map

前言:老是忘记怎么快速筛选因数,我们只需要枚举小于sqrt( num ) 的数,这样可以降低很多复杂度,而且我们的因数一定是成对出现的,所以我们遇到一个因数的时候x,判断 x 2 x^2 x2 是否…

【华为】配置RIP协议

RIP(Routing Information Protocol)是一种内部网关协议(IGP),主要用于小型网络中的动态路由。RIP有两个主要版本:‌RIPv1和‌RIPv2,它们之间存在一些关键区别: ‌分类支持‌&#xf…