2.12、this关键字

  1. 2.12、this关键字(重点)

2.12、this关键字(重点

this在Java中表示出以下的概念:

  • 调用类中的属性:this.属性
  • 调用类中的方法:this.方法()
  • 调用类中的构造:this()
  • 表示当前对象:this

范例:观察以下的题目

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

public class Demo02 {
    public static void main(String args[]) {
        Person per = new Person("张三", 30);
        System.out.println(per.getName()+ "-->"+ per.getAge());
    }
};

通过this关键字调用本类中的其他构造方法,调用形式为:this()的形式

class Person {
    private String name;
    private int age;
    public Person(){
        System.out.println("新的对象产生了");
    }
    public Person(String name, int age) {
        this();  //调用无参构造
        this.name = name;
        this.age = age;

    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

public class Demo02 {
    public static void main(String args[]) {
        Person per = new Person("张三", 30);
        System.out.println(per.getName()+ "-->"+ per.getAge());
    }
};

所有的构造方法应该是对象操作前最早调用的,所以使用this调用构造方法的时候所有代码必须放在构造方法的首行。

在使用this调用构造方法的时候至少有一个构造方法是没有this()调用的,而此构造方法将作为调用的出口,一般这个出口都会使用无参构造完成。

以上是this使用最多的两种情况,但是this有一个最重要的概念——表示当前对象。当前正在调用类中方法的对象,称为当前对象。

如下,分别用两种方法打印对象per1和per2

class Person{  // 定义Person类
    public String getInfo(){ // 取得信息的方法
        System.out.println("Person类 --> " + this) ; // 直接打印this
        return null ; // 为了保证语法正确,返回null
    }
}

public class Demo02 {
    public static void main(String args[]) {
        Person per1 = new Person() ; // 调用构造实例化对象
        Person per2 = new Person() ; // 调用构造实例化对象
        System.out.println("MAIN方法 --> " + per1) ; // 直接打印对象
        per1.getInfo() ; // 当前调用getInfo()方法的对象是per1
        System.out.println("MAIN方法 --> " + per2) ; // 直接打印对象
        per2.getInfo() ; // 当前调用getInfo()方法的对象是per2
    }
}

可见,用this调用的是当前对象,与直接per1,per2是一样的效果


转载请注明来源