Java的this关键字

实际上很多语言都有this这个关键字,说到底就是他到底代指什么,“哪个是哪个?”。Java是面向对象的,那this和对象是什么关系,该怎么用。

先说结论:
this == 当前对象
(你this在那个对象里,你就是这个当前对象,比如我是一个人,人是一个类,我是人这个类别下new 出来的对象,当我做关于自己的事,我不会叫我自己的大名,而是找一个“我”来指代,我去上班,我的手机)

由此展开this的用法也是围绕这个参照当前对象来使用
this 当前对象本身 “我”

this.方法名 调用当前对象的某个方法 “我去骑车”

this.属性名 当前对象的属性 “我的电脑”

this(参数) 根据参数当前对象的构造方法 “有一千万的我”

外部类名.this.属性 内部类中调用的是外部类的某个属性(调用外部类方法亦同) “公司过道上工位上瑟瑟发抖的我” 我是一个整体,作为公司的一个员工是我的一个角色,相当于我的内部类,因为平常外人没人会关心你一个打工的在那打工。

一 this具体的实现
this可以说是有对象才有this,this关键字的意义被解释为“指向当前对象的引用”。当前对象我们可以理解,这个引用是什么?实际在别的地方也叫做句柄,里面放着不是具体的实际内容,而是实际内容的存储地址的地址值。

那我们就可以得到this在Java中对应的是他所指代的对象的引用,就是一个当前对象引用的别名。

二 this的代码演示
talk is cheap show me code
我们要如何证明this就是当前对象,首先我们看一看没有this的情况.
以下代码我的本意,是生成一个HandsomeBoy的对象,让这个对象来做自我介绍。

public class ThisTestThree {
    @Test
    void test(){
        HandsomeBoy handsomeBoy = new HandsomeBoy("ZP");
        handsomeBoy.introduce();
    }
}

class HandsomeBoy{

    String name;

    HandsomeBoy(String name){
        name = name;
    }

    public void introduce(){
        System.out.println("大家好我是: " +  name);
    }
}

然而返回的结果是

大家好我是: null

这是为什么,因为ZP这个name并没有传进这个参数,在类的内部局部变量优先级更高,导致用的是HandsomeBoy里面的name,然而这个name没有赋值,直接是null。(实际你可以在里面给name赋值试一试来验证,比如说String name = “吴彦祖”)

这时候你要想把当前对象属性修改的时候就会用到this

public class ThisTestThree {
    @Test
    void test(){
        HandsomeBoy handsomeBoy = new HandsomeBoy("ZP");
        handsomeBoy.introduce();
    }
}

class HandsomeBoy{

    String name;

    HandsomeBoy(String name){
        this.name = name;
    }

    public void introduce(){
        System.out.println("大家好我是: " +  name);
    }
}

于是你通过构造方法构造的对象,以及它的属性你可以真正去修改了,从而验证了this到底是啥,“这个是那个的?”的问题也就解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值