用this调用构造器,只能在一个构造器中调用另一个构造器
且必须放在第一条语句
public class ThisD{
public static void main(String[] agrs){
T t = new T();
}
}
class T{
String name = "张三";
int age = 20;
// 用this调用构造器,只能在一个构造器中调用另一个构造器
// 切必须放在第一条语句
public T() {
this("张三");
System.out.println("T()构造器");
}
public T(String name){
System.out.println("T(String name)构造器");
}
我们可以看到, 在第一个构造器中,用 this("张三"),是将张三作为形参传递给第二个构造器,从而输出 T(String name)构造器, 后又继续输出 T()构造器。
this 可以用来访问本类的属性
public class ThisD{
public static void main(String[] agrs){
T t = new T();
t.f1();
System.out.println("-------------");
t.f2();
}
}
class T{
String name = "张三";
int age = 20;
// this 可以用来访问本类的属性
public void f1(){
System.out.println(name + " " + age);
System.out.println(this.name + " " + this.age);
}
public void f2(){
String name = "李四";
System.out.println(name + " " + age);
System.out.println(this.name + " " + this.age);
}
}
我们可以看出,当使用 f1() 方法时,name和this.name都可以访问到我们 T 这个类的属性,将姓名和年龄打印。那这两者有什么区别呢
我们可以继续看到横线下 f2() 方法的输出结果,两个方法的区别在于,f2中新定义了一个局部变量name = 李四,根据就近原则,当使用name输出时,它找到的是这个局部变量,而没有这个局部变量时,它才会找到我们本类的属性,而使用this.name时,它找到的一定是我们这个本类的属性。