- 表示本类属性,例:this.name。如果要在构造方法中给本类属性复制的话,没有this关键字就是形参自己等于自己,因为我们有就近使用原则,加上this关键字之后会破坏这种原则直接从类中找这个同名属性。
//
this.name表示调用类中的name属性,不再遵循就近原则
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Ex3{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
- 表示当前对象:当前是哪个对象调用我的普通方法或者普通属性,我的this就指代谁
//this在对象内部指代自身的引用
class Person{
public void print(){
System.out.println("[PRINT]方法:"+ this);
}
}
public class Ex1{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("[MAIN]方法:"+p1);
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN]方法:"+p2);
p2.print();
}
}
Java编程思想中的例子:
public class Parent {
int i = 0;
Parent test(){
i++;
return this;
}
void print(){
System.out.println(i);
}
public static void main(String[] args) {
Parent parent = new Parent();
parent.test().test().test().print();
}
}
- 表示本类方法:
- this可以表示调用的构造方法:this(构造方法的参数)
注意点:在构造方法中如果要用this调用本类其他构造方法,必须放首行,不能成环(递归操作)
//this调用本类构造方法
class Person{
private String name;
private int age;
public Person(){
System.out.println("********产生一个新的Person对象********");
}
public Person(String name){
this();//调用本类无参构造
this.name = name;
}
public Person(String name,int age){
this(name);//调用本类有参构造
this.age = age ;
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Ex4{
public static void main(String[] args) {
Person per1 = new Person();
Person per2 = new Person("张三");
Person per3 = new Person("李四",20);
System.out.println(per1.getPersonInfo());
System.out.println(per2.getPersonInfo());
System.out.println(per3.getPersonInfo());
}
}
- 调用普通方法(可省略):this.方法名(方法参数)
注意点:之所以要加上名称因为方法名和上面构造方法不一样(构造方法不需要名称,因为一定和类同名,所以只用this传他的参数即可)
/*
this调用本类普通方法
*/
class Person{
private String name;
private int age;
public Person(String name,int age){
this.print();//调用普通方法
this.name = name ;
this.age = age ;
this.print();//调用普通方法
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
public void print(){
System.out.println("*****************");
}
}
public class Ex2{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}