Java学习(this关键字)

本文详细介绍了Java中this关键字的作用,包括它如何指代当前对象,消除参数与属性的歧义,以及在构造器中的使用。示例代码展示了this在设置对象属性、调用方法和构造器链中的应用,强调了this放置于构造器首行的重要性。
摘要由CSDN通过智能技术生成

this的语义是代指之前提到的事物,表示这个。那这个又是哪个呢?在Java中this表示的当前对象。下面通过代码验证一下:

public class Demo {
    public void testThis(){
        System.out.println(this);
    }
    public static void main(String[] args) {
        Demo demo = new Demo();
        System.out.println(demo);
        demo.testThis();
        System.out.println("------------");
        Demo demo1 = new Demo();
        System.out.println(demo1);
        demo1.testThis();
    }
}

通过测试可以发现this指代的就是当前对象。观察一下以下代码:

public class Person {
    private String name;
    private int age;

    public Person(String name,int age){
        name = name;
        age = age;
    }

    public void getInfo(){
        System.out.println("name = " + name + ",age = " + age);
    }

    public static void main(String[] args) {
        Person person = new Person("张三", 18);
        person.getInfo();
    }
}

它的输出会是什么呢?name = null,age = 0。name和age属性的值都是相应类型的值的默认值,也就是说name和age的值并没有传到对象去,主要原因就是参数和属性一致,分不清哪个是属性哪个是参数。那我们把参数改一下不就行了吗?确实是可以的,但是不建议,因为我们在阅读代码的时候需要知道每个属性、参数的含义,换一个参数名可能就无法正确的表明其含义。这时候就需要采用this关键字了。

public class Person {
    private String name;
    private int age;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public void getInfo(){
        System.out.println("name = " + name + ",age = " + age);
    }

    public static void main(String[] args) {
        Person person = new Person("张三", 18);
        person.getInfo();
    }
}

通过this关键字消除了参数和属性之间的歧义。那没有使用this之前的name = name;到底哪个是属性哪个是方法参数呢?其实它们都是方法参数,这应该算是一种就近原则,你面前有一瓶水,十米外有一瓶水,没有确定一定要拿哪瓶水的情况下你肯定是拿面前的水。

this可以调用本类属性,当然也可以调用本类方法。

public class Person {
    private String name;
    private int age;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public int getAge(){
        return age;
    }
    public int tenYearsLater(){
        return this.getAge() + 10;
    }
    public void getInfo(){
        System.out.println("name = " + name + ",age = " + age);
    }

    public static void main(String[] args) {
        Person person = new Person("张三", 18);
        person.getInfo();
        System.out.println(person.tenYearsLater());
    }
}

this调用构造器。

public class Person {
    private String name;
    private int age;

    public Person(){
        System.out.println("无参构造");
    }
    public Person(String name){
        this();
        this.name = name;
    }
    public Person(String name,int age){
        this(name);
        this.age = age;
    }

    
    public void getInfo(){
        System.out.println("name = " + name + ",age = " + age);
    }

    public static void main(String[] args) {
        Person person = new Person("张三", 18);
        person.getInfo();
    }
}

如果类中有多个构造器的话,可以使用this关键字进行调用,语法是this(参数),但是不要出现互相调用(A调用B,B调用A),无参构造器尽量不要调用构造方法,this()要放在构造器第一行。为什么this()一定要放在第一行呢?原因很简单,你只有盖好了房子才能把东西放进去。如果this()不在第一行的话,你前面的东西怎么调用呢?又放在哪儿呢?所以说this调用构造器只能放在构造器首行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值