this关键字的作用:
1、表示类中的属性。
class Person{ // 定义Person类
private String name ; // 姓名
private int age ; // 年龄
public Person(String name,int age){ // 通过构造方法赋值
this.name = name ; // 为类中的name属性赋值
this.age = age ;// 为类中的age属性赋值
}
public String getInfo(){ // 取得信息的方法
return "姓名:" + name + ",年龄:" + age ;
}
};
public class ThisDemo02{
public static void main(String args[]){
Person per1 = new Person("张三",33) ; // 调用构造实例化对象
System.out.println(per1.getInfo()) ; // 取得信息
}
};
class Person{ // 定义Person类
private String name ; // 姓名
private int age ; // 年龄
public Person(String name,int age){ // 通过构造方法赋值
this.name = name ; // 为类中的name属性赋值
this.age = age ;// 为类中的age属性赋值
}
public String getInfo(){ // 取得信息的方法
return "姓名:" + name + ",年龄:" + age ;
}
};
public class ThisDemo02{
public static void main(String args[]){
Person per1 = new Person("张三",33) ; // 调用构造实例化对象
System.out.println(per1.getInfo()) ; // 取得信息
}
};
2、使用this调用本类的构造方法。
构造方法间可以互相调用,使用this(参数)的形式完成。
注意:在使用this关键字调用其他构造方法时,this()调用构造方法的语句只能放在构造方法的首行。
在使用this调用本类中的其他构造方法是,至少有一个构造方法是不用this调用的,以防止递归调用的情况出现。
- class Person{ // 定义Person类
- private String name ; // 姓名
- private int age ; // 年龄
- public Person(){ // 无参构造
- System.out.println("新对象实例化") ;
- }
- public Person(String name){
- this() ;// 调用本类中的无参构造方法
- this.name = name ;
- }
- public Person(String name,int age){// 通过构造方法赋值
- this(name) ;// 调用有一个参数的构造方法
- this.age = age ;// 为类中的age属性赋值
- }
- public String getInfo(){ // 取得信息的方法
- return "姓名:" + name +",年龄:" + age ;
- }
- };
- public class ThisDemo05{
- public staticvoid main(String args[]){
- Person per1 = new Person("张三",33) ;// 调用构造实例化对象
- System.out.println(per1.getInfo()) ; // 取得信息
- }
- };
class Person{ // 定义Person类
private String name ; // 姓名
private int age ; // 年龄
public Person(){ // 无参构造
System.out.println("新对象实例化") ;
}
public Person(String name){
this() ;// 调用本类中的无参构造方法
this.name = name ;
}
public Person(String name,int age){ // 通过构造方法赋值
this(name) ;// 调用有一个参数的构造方法
this.age = age ;// 为类中的age属性赋值
}
public String getInfo(){ // 取得信息的方法
return "姓名:" + name + ",年龄:" + age ;
}
};
public class ThisDemo05{
public static void main(String args[]){
Person per1 = new Person("张三",33) ; // 调用构造实例化对象
System.out.println(per1.getInfo()) ; // 取得信息
}
};
3、表示当前对象。
使用this和引用传递比较两个对象是否相等。
String本身是一个类,进行相等的比较,则要判断内容,使用equals()方法来完成。
age是int类型,使用 == 即可。
地址相等,则两个对象相等。地址如果不相等,一次判断属性内容是否相等。
- class Person{ // 定义Person类
- private String name ; // 姓名
- private int age ; // 年龄
- public Person(String name,int age){
- this.setName(name) ;
- this.setAge(age) ;
- }
- public boolean compare(Person per){
- // 调用此方法时里面存在两个对象:当前对象、传入的对象
- Person p1 = this ; // 当前的对象,就表示per1
- Person p2 = per ; // 传递进来的对象,就表示per2
- if(p1==p2){ // 判断是不是同一个对象,用地址比较
- return true ;
- }
- // 之后分别判断每一个属性是否相等
- if(p1.name.equals(p2.name)&&p1.age==p2.age){
- return true ; // 两个对象相等
- }else{
- return false ; // 两个对象不相等
- }
- }
- public void setName(String name){ // 设置姓名
- this.name = name ;
- }
- public void setAge(int age){ // 设置年龄
- this.age = age ;
- }
- public String getName(){
- return this.name ;
- }
- public int getAge(){
- return this.age ;
- }
- };
- public class ThisDemo08{
- public staticvoid main(String args[]){
- Person per1 = new Person("张三",30) ;// 声明两个对象,内容完全相等
- Person per2 = new Person("张三",30) ;// 声明两个对象,内容完全相等
- // 直接在主方法中依次取得各个属性进行比较
- if(per1.compare(per2)){
- System.out.println("两个对象相等!") ;
- }else{
- System.out.println("两个对象不相等!") ;
- }
- }
- };