·调用类中的属性 this.属性
·调用类中的方法 this.方法
·调用类中的构造
·表示当前对象
1.this调用类中的属性
class Person{
private String name;
private int age ;
public Person(String name ,int age){
this.name = name ;
this.age = age ;
}
public void setAge(int age){
this.age = age ;
}
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo02{
public static void main(String args[]){
Person per = new Person("zhangsan", 30) ;
System.out.println(per.getName() +"-------->"+per.getAge()) ;
}
} ;
----------------------
class Person{
private String name;
private int age ;
public Person(){
System.out.pintln("新的对象产生了") ;
}
public Person(String name){
System.out.pintln("新的对象产生了") ;
}
public Person(String name ,int age){
this.name = name ;
this.age = age ;
System.out.pintln("新的对象产生了") ;
}
public void setAge(int age){
this.age = age ;
}
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo03{
public static void main(String args[]){
Person per = new Person("zhangsan", 30) ;
System.out.println(per.getName() +"-------->"+per.getAge()) ;
}
} ;
以上代码有不少重复,应该要消除重复代码。那么此时就可以通过this关键字调用类中的其他构造方法,调用形式为this();
2.使用this调用类中的构造方法
class Person{
private String name;
private int age ;
public Person(){
System.out.println("新的对象产生了") ;
}
public Person(String name){
this() ;//调用无参构造
this.name = name ;
//System.out.pintln("新的对象产生了") ;
}
public Person(String name ,int age){
this(name) ;//调用有一个参数的构造。
this.age = age ;
//this.name = name ; // 因为是先调用this(name) 这个构造方法,而其已经有this.name = name 语句,古可以省略此句中的this.name = name ;
//System.out.pintln("新的对象产生了") ;
}
public void setAge(int age){
this.age = age ;
}
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo04{
public static void main(String args[]){
Person per = new Person("zhangsan", 30) ;
System.out.println(per.getName() +"-------->"+per.getAge()) ;
}
} ;
所有的构造方法应该是对象使用前最早调用的,所以用this调用构造方法的时候,例如本例中this()/this(name) 必须放在构造方法的首行。
-----------------------------
class Person{
private String name;
private int age ;
public Person(){
this("2","3") ;
System.out.println("新的对象产生了") ;
}
public Person(String name){
this() ;//调用无参构造
this.name = name ;
//System.out.pintln("新的对象产生了") ;
}
public Person(String name ,int age){
this(name) ;//调用有一个参数的构造。
this.age = age ;
//System.out.pintln("新的对象产生了") ;
}
public void setAge(int age){
this.age = age ;
}
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
public int getAge(){
return this.age ;
}
};
public class ThisDemo04{
public static void main(String args[]){
Person per = new Person("zhangsan", 30) ;
System.out.println(per.getName() +"-------->"+per.getAge()) ;
}
} ;
在使用this调用构造方法的时候,至少有一个构造方法是没有使用this调用的,。而此构造将作为调用的出口,一般这个出口都会使用无参构造来完成。如上,在无参构造中加入this("2","3")会报错(错误为递归调用的错误)
以上是this使用最多的两种情况,但是this有个最总要的概念------------------>表示当前对象
3.this表示当前对象
当前正在调用类中方法的对象,称为当前对象。
class Person{
public void print(){
System.out.println(this) ;
}
} ;
public class ThisDemo06{
public static void main(String args[]){
Person per1 = new Person() ;
Person per2 = new Person() ;
System.out.println(per1) ;
per1.print() ;
System.out.println(per2) ;
per2.print() ;
}
打印结果可以看到System.out.println(per1) 的输出结果跟per1调用print()方法的结果是一样的.即地址相同, 表示的是同一个对象。