欢迎光临
我们一直在努力

【Java 入门 Day8】面向对象进阶:this 关键字 + 引用 + 对象创建全过程,空指针不再懵圈

承接上篇 OOP 内容,深挖 this 两种用法、引用内存原理、对象创建三步流程,破解新手头号噩梦:空指针异常

一、this 关键字两大用法(this. | this ())

用法 1:this. 代表「当前我这个对象」

  • this.成员变量:调用本对象的属性,解决成员变量、局部变量重名就近问题
  • java运行

    public void setName(String name){
    //this.name是成员变量,不带this是传入的局部参数
    this.name = name;
    }

    人话:this 就是「本人」,重名分不清谁是谁,加 this 锁定成员变量。

  • this.成员方法():调用本类里面其他普通方法
  • java运行

    public void test(){
    this.eat();//调用同类eat方法
    }

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

  • this():调用本类无参构造;this(实参)调用本类有参构造
  • 铁律:this () 必须写在构造方法第一行有效代码!!
  • 禁止循环套娃:A 构造调 B,B 不能回头调 A,不然递归报错
  • java运行

    public Person(){
    this("默认姓名");//必须首行,调用有参构造
    }

    举例:接生的时候顺带复用另一个接生流程,不能绕圈互相接生无限套娃。

    二、对象创建完整三步流程(内存赋值三次机会)

    Person p = new Person("老王",30);执行时底层分三步:

  • 分配堆内存:开辟对象空间,成员变量赋第一次默认值(int=0、String=null)
  • 初始化属性:字面量赋值,第二次赋值
  • 执行构造方法:构造内给属性赋值,第三次赋值
  • 总结:成员变量有三次改值机会:默认→字面量→构造赋值。

    三、引用(难点破防点):Java 对象内存灵魂

    1. 引用本质

    对象类型变量就是引用,栈内存里存的是堆中对象的首地址(门牌号)

    java运行

    Worker w = new Worker();
    //w是栈里的引用,存着堆里面Worker实体的内存地址

    2. 引用赋值特点

  • Worker w2 = w;:w 和 w2 存同一个门牌号,指向堆里同一个对象,改 w2 的属性,w 同步变化!
  • 热梗:一把家门钥匙复制两份,俩人都能开门改屋里东西,一个人挪家具另一个进屋看见变化。

  • 基本数据类型赋值:复制数值(新开小盒子);引用赋值:复制地址(共用一套房子)
  • 3. 空指针 NullPointerException 头号元凶

    java运行

    Worker w3 = null;//引用啥地址都不存,悬空状态
    w3.name = "xx";//运行直接空指针报错

    抽象吐槽:钥匙是空的没绑定任何房子,非要开门进屋拿东西,系统直接原地破防抛空指针。 踩坑提醒:只要引用是 null,调用任何。属性 /. 方法必空指针。

    4. 引用使用场景

    可以当方法形参、方法返回值、数组元素,日常开发随处可见。

    四、不规则补充小总结(避坑清单)

  • this () 仅限构造内部首行,普通方法不能写 this ()
  • 自定义有参构造后,无参构造自动消失,按需手动补上
  • 成员变量天生带默认值,局部变量必须手动赋值才能使用
  • 引用 = null = 空房子钥匙,调用成员必炸空指针
  • 赞(0)
    未经允许不得转载:171主机测评 » 【Java 入门 Day8】面向对象进阶:this 关键字 + 引用 + 对象创建全过程,空指针不再懵圈
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址