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来调用构造函数,根据不同的参数,调用不同的构造函数。
在无参构造函数中,调用了两次构造函数,编译报错。在其余的函数中调用构造函数,也出现编译报错。
注:在一个构造函数中,只能调用一个构造函数。不能在构造函数以外的函数中调用构造函数。