一、两种编程思想

1. 面向过程:以步骤、流程为核心,拆分一步步操作解决问题,侧重怎么做。

2. 面向对象:以现实事物(对象)为核心,抽取事物封装成类,依靠对象之间协作完成功能,侧重谁来做。

二、类与对象基础

1. 对象

客观存在的具体事物,Java中万物皆对象;对象包含两大组成:

• 属性(静态特征):事物具备的特点,用成员变量存储

• 方法(动态行为):事物拥有的功能、动作,用成员方法实现

2. 类和对象关系

• 类:对象的模板、抽象概括,定义一类事物通用属性和方法

• 对象:类的具体实例,一个类可以创建多个不同对象

三、类的三大组成:成员变量、成员方法、构造方法

(一)成员变量(属性)

1. 位置:写在类内部、所有方法外部

2. 语法:
// 声明+赋值写在同一行,不能分开两行赋值
数据类型 变量名;
数据类型 变量名 = 值;
❌错误写法:
class Test{
    int num;
    num = 10; // 类体中不能单独写赋值语句
}
3. 默认初始值
数据类型 默认值 
整数(byte/short/int/long) 0 
小数(float/double) 0.0 
char 空字符\u0000 
boolean false 
引用类型(类、数组、String) null 

4. 作用域:整个当前类全部有效

5. 命名冲突:
同类中成员变量名不能重复;成员变量可以和局部变量重名,方法内优先使用局部变量,想要访问成员变量需要加this.。

成员变量 vs 局部变量(重点)
对比项 局部变量 成员变量 
定义位置 方法/代码块内部 类中、方法外部 
默认值 无默认值,使用前必须手动赋值 自带默认初始值 
作用范围 仅当前方法/代码块内生效 整个类都可访问 
命名重复 同作用域不能重名 可与局部变量重名,局部优先 

(二)成员方法(行为功能)

1. 位置:类内部、其他方法外面

2. 语法格式
修饰符 返回值类型 方法名(形参列表){
    // 方法体:功能代码
}
⚠️普通成员方法不要加static,加static属于静态方法。
3. 方法重载 overload

• 定义:同一个类中,多个方法方法名相同,形参列表不同

• 满足条件:
①方法名必须完全一致
②形参列表不同(个数、类型、参数顺序任一不同即可)
③返回值类型、修饰符、异常不影响重载成立

• 调用规则:优先精准匹配参数类型,匹配失败向上兼容匹配,全都不匹配则编译报错

• 作用:让同一类功能拥有多种调用方式,代码更灵活通用

(三)构造方法(构造器)

1. 作用:专门在创建对象时,给成员变量初始化赋值

2. 固定特点:
①方法名必须和类名一模一样,大小写完全相同
②没有返回值类型,连void都不能写
③支持方法重载(无参构造、有参构造)
④只能在new创建对象时自动调用,无法手动直接调用,一个对象创建仅执行1次构造方法

3. 默认规则:

• 类中没有手动写任何构造方法,JVM会自动赠送一个公开无参构造方法

• 一旦手动定义了任意一个有参构造,JVM不再提供默认无参构造,建议开发习惯:同时手写无参构造+全参构造

4. 语法:
修饰符 类名(参数列表){
    // 初始化属性代码
}
四、对象创建与使用

1. 创建对象语法
// 类名 引用变量名 = new 类名(构造方法实参);
Student s = new Student();
2. 对象访问格式

• 访问属性:对象名.成员变量名

• 给属性赋值:对象名.属性名 = 数值;

• 调用方法:对象名.方法名(实参);

五、this关键字两大用法

1、this.成员 访问当前对象

• this.属性名:访问当前对象的成员变量,解决成员变量和局部变量重名问题

• this.方法名():调用当前对象的普通成员方法

• 正常无命名冲突时,this.可以省略不写;重名场景必须加this.区分

2、this()调用本类其他构造方法

• this():调用本类无参构造方法

• this(实参):调用本类有参构造方法
⚠️硬性规则:

1. this()必须写在构造方法第一行有效代码

2. 不能互相循环调用(A构造调B、B构造又调A,会出现递归报错)

3. 仅能在构造方法内使用this(),普通成员方法不能写this()

六、对象创建完整三步流程

1. 分配堆内存空间,所有成员变量赋予系统默认初始值

2. 执行变量定义处赋值语句,成员变量完成第二次赋值

3. 执行构造方法代码,完成第三次属性赋值

七、引用类型(重难点)

1. 概念:类、数组这类对象类型的变量统称为引用变量

2. 存储特点:引用变量存放在栈内存,存储的值是堆内存中对象的首地址,并不直接存对象本身

3. 内存特点:多个引用可以指向同一个堆对象;每个new出来的对象都是独立堆空间,互不干扰

4. null空引用:
引用赋值为null,代表该引用没有指向任何堆对象;此时执行引用.属性 / 引用.方法不会编译报错,但运行抛出 NullPointerException空指针异常

5. 赋值区别:

• 基本数据类型赋值:传递真实数值,互相修改互不影响

• 引用类型变量赋值:传递对象堆地址,多个引用指向同一对象时,一个引用修改属性,其他引用访问都会看到修改后的结果

6. 引用使用场景:可以作为方法形参、方法返回值、数组元素类型

简易内存图总结

• 栈内存:存放局部变量、引用变量(存对象地址),方法执行完毕自动释放

• 堆内存:存放new出来的所有对象实体、成员变量,没有引用指向后等待垃圾回收释放

更多推荐