关键字-this

1、当成员变量和局部变量重名时,在方法中使用this时,this指向的是该方法所在类的成员变量。

package gc.test.java.cs1;

public class User{
    
    public String name = "张三";
    
    public void show(String name){
        System.out.println("name:" + name);
        System.out.println("this.name:" + this.name);
        this.name = name;
    }
    
}
package gc.test.java.cs1;

public class Main {

    public static void main(String[] args) {
        
        User user = new User();
        user.show("李四");
        System.out.println("user.name:" + user.name);
    }
}

运行结果:

name:李四
this.name:张三
user.name:李四

通过上的运行结果可以看出,在show方法中,对name操作,指向的是show的参数,要对该类中的成员变量操作,需要带上this引用。

2、可以把自己当做参数传递,也可以使用this.成员变量。

package gc.test.java.cs1;

public class Base {
    
    public void show(User user){
        System.out.println("Base.user.name:" + user.name);
    }
}
package gc.test.java.cs1;

public class User{
    
    public String name = "张三";
    
    public void show(String name){
        Base base = new Base();
        base.show(this);
    }
    
}
package gc.test.java.cs1;

public class Main {

    public static void main(String[] args) {
        User user = new User();
        user.show("李四");
    }
}

运行结果:

Base.user.name:张三

通过上面的运行结果可以看出,在User类的show方法中,把自己当做传输传递,在Base类的show方法中使用时,指向的是User的成员变量,而不是User类中show方法的参数。

3、在构造函数中,可以通过this调用同一类中其余的构造函数,this指向的是该构造函数所在的类。

package gc.test.java.cs2;

public class Member {

    Member(String name){
        System.out.println("我的名字叫" + name);
    }
    
    Member(String name, int age){
        this(name);
        System.out.println("我的今年" + age + "岁");
    }
    
    Member(){
        this("张三", 20);
        this(name);//编译报错
    }
    
    void show(){
        this("张三", 20);//编译报错
    }
}
package gc.test.java.cs2;

public class Main {

    public static void main(String[] args) {
        Member member = new Member();
    }
}

运行结果:

我的名字叫张三
我的今年20岁

通过上面的运行结果可以看出,可以直接通过this来调用构造函数,根据不同的参数,调用不同的构造函数。

在无参构造函数中,调用了两次构造函数,编译报错。在其余的函数中调用构造函数,也出现编译报错。

注:在一个构造函数中,只能调用一个构造函数。不能在构造函数以外的函数中调用构造函数。

原文地址:https://www.cnblogs.com/guochang/p/9558338.html