一、两种编程思维(了解即可)
1. 面向过程:把要解决的事拆成一步一步的操作,按顺序走完所有步骤就能完成任务,更聚焦做事的流程细节。
2. 面向对象:先梳理出程序里会涉及的所有事物(也就是对象),把每个事物当成独立整体,依靠事物之间的关联配合来解决问题。
二、什么是对象(需要理解)
1. 现实里的各类事物,在Java代码里的呈现形式就是对象,万物都可以被抽象成对象。
2. 对象包含两部分内容:
(1) 属性:事物自带的静态特征、特点,在代码里用变量来实现。
(2) 方法:事物能实现的功能、能做出的行为,在代码里用函数/方法实现。
3. 类的作用:用类来归纳描述一类对象统一拥有的属性和方法。
4. 类和对象的关系:
(1) 类是对象的设计模板、蓝图;
(2) 对象是按照类的模板造出来的具体实例,一个模板能批量造出很多个不同实例。
三、类的构成(开发重点内容)
1. 属性(成员变量):刻画一类事物的特征
(1) 也叫成员变量;
(2) 书写位置:写在大括号的类体里,不能放在方法内部;
(3) 书写规则:
基础写法: 数据类型 变量名;
声明同时赋值: 数据类型 变量名 = 初始值;
注意:不能先单独声明成员变量,再在类体里单独写赋值语句,初始化要和声明写在一起,比如:
java
class A{
int value;
value = 20; // 这种写法非法,初始化必须跟着声明完成
}
(4) 开发小提示:定义类的时候,只需要写业务需要用到的属性,不用把事物所有特征都罗列出来。
(中间过渡内容)
注意:方法做重载设计时,要避免参数设计太接近,出现调用匹配混乱的情况。
d. 重载的好处:能让代码通用性、灵活性变得更强。
3. 构造方法
(1) 它是类里一种特殊的方法,也叫构造器;
(2) 专属特点:
a. 方法名必须和类名完全一模一样;
b. 没有返回值,连 void 关键字都不能加;
格式: 修饰符 类名(形参列表){}
c. 支持方法重载;
d. 不能手动在代码里直接调用;
(3) 使用注意事项:
a. 构造方法不能手动调用,创建对象时JVM会根据传入的实参,自动匹配对应构造方法完成对象创建,一个对象创建全程只会执行一次构造方法;
b. 如果一个类没有写任何构造方法,JVM会自动给这个类补一个公开的无参构造;只要你写了任意一个有参构造,JVM就不会再自动补默认无参构造了;
(4) 核心用途:一般用来给对象的属性做初始化赋值;
(5) 开发建议:写类的时候,常规要同时提供无参构造和全参构造,多数场景下有参构造的参数数量、类型要和类里的属性对应上。
四、对象怎么创建和使用
1. 创建格式: 类名 对象名 = new 类名();
2. 对象的操作方式:
(1) 属性操作:
赋值: 对象名.属性名 = 数值;
取值: 对象名.属性名
(2) 调用方法: 对象名.方法名(实参数据);
五、this关键字的两种用法(开发高频使用)
1. this. 访问成员
(1) this 就代表当前正在操作的对象,可以理解成“我这个对象”;
(2) 在普通成员方法、构造方法里,用 this. 就能调用当前对象自身的属性和方法;
(3) 细分用法:
this.属性名 :特指当前对象的成员属性
this.方法名(实参) :特指调用当前对象的成员方法
(4) 小细节:大部分情况 this. 可以省略,但如果成员变量和方法里的局部变量重名了,必须加 this. 来区分成员变量。
2. this() 调用本类其他构造方法
(1) 只能写在构造方法内部,用来调用同一个类里别的构造方法;
(2) 细分用法:
this() :调用本类的无参构造
this(实参) :调用本类对应参数列表的有参构造
(3) 硬性规则: this() / this(实参) 必须放在构造方法里的第一行有效代码位置;
(4) 避坑提醒:不能在多个构造方法里互相循环调用 this() ,不然会出现递归死循环,一个类里不能所有构造方法第一行都写 this() 相关调用。
六、对象创建的底层流程(需要理解)
1. 分配内存空间:给对象所有属性分配内存,同时赋上系统默认初始值;
2. 显式初始化属性:执行声明时写的赋值代码,给属性第二次赋值;
3. 执行构造方法:运行构造方法里的代码,给属性完成第三次赋值。
七、引用相关知识(难点重点理解)
1. 引用:对象类型的变量就叫做引用类型变量,简称引用;
2. 引用变量里存的,是对象在堆内存里的首地址;
3. 不同对象互相独立,堆内存会给每个对象划分专属的存储空间;
4. 引用可以单独声明不初始化: 类名 引用名;
示例: Worker w;
5. 如果引用赋值为 null ,再用这个引用调用属性或方法,编译能通过,但运行会抛出 java.lang.NullPointerException 空指针异常;
6. 引用之间互相赋值,传递的是对象的堆内存地址;而基本数据类型变量互相赋值,传递的是具体的数值;
7. 引用可以用在方法形参、方法返回值、数组元素这些场景里。


