this关键字(重要)

this关键字:
  ·调用类中的属性     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()方法的结果是一样的.即地址相同,  表示的是同一个对象。







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值