承接上篇 OOP 内容,深挖 this 两种用法、引用内存原理、对象创建三步流程,破解新手头号噩梦:空指针异常
一、this 关键字两大用法(this. | this ())
用法 1:this. 代表「当前我这个对象」
java运行
public void setName(String name){
//this.name是成员变量,不带this是传入的局部参数
this.name = name;
}
人话:this 就是「本人」,重名分不清谁是谁,加 this 锁定成员变量。
java运行
public void test(){
this.eat();//调用同类eat方法
}
用法 2:this () 调用本类其他构造方法
java运行
public Person(){
this("默认姓名");//必须首行,调用有参构造
}
举例:接生的时候顺带复用另一个接生流程,不能绕圈互相接生无限套娃。
二、对象创建完整三步流程(内存赋值三次机会)
Person p = new Person("老王",30);执行时底层分三步:
总结:成员变量有三次改值机会:默认→字面量→构造赋值。
三、引用(难点破防点):Java 对象内存灵魂
1. 引用本质
对象类型变量就是引用,栈内存里存的是堆中对象的首地址(门牌号)
java运行
Worker w = new Worker();
//w是栈里的引用,存着堆里面Worker实体的内存地址
2. 引用赋值特点
热梗:一把家门钥匙复制两份,俩人都能开门改屋里东西,一个人挪家具另一个进屋看见变化。
3. 空指针 NullPointerException 头号元凶
java运行
Worker w3 = null;//引用啥地址都不存,悬空状态
w3.name = "xx";//运行直接空指针报错
抽象吐槽:钥匙是空的没绑定任何房子,非要开门进屋拿东西,系统直接原地破防抛空指针。 踩坑提醒:只要引用是 null,调用任何。属性 /. 方法必空指针。
4. 引用使用场景
可以当方法形参、方法返回值、数组元素,日常开发随处可见。




