this关键字的作用:
(1)表示类中属性,如下代码是为了明确的表示出,哪个是类中的属性,于是就要加上"this.属性名称",加以区分!
public class This {
public static void main(String[] args) {
Person4 person4 =new Person4("nishuibaichuan", 21);
System.out.print(person4.getIofe());
}
}
class Person4{
private String name;
private int age;
public Person4(String name,int age){
this.name = name;//this.name为类中的name属性.
this.age = age;//this.age为类中的age属性.
}
public String getIofe(){
return "姓名:" + this.name + ",年纪:" + this.age;
}
}
在大部分属性操作的时候,用上this是最合理的,包括把属性声明为私有的。
运行结果: 姓名:nishuibaichuan,年纪:21
(2)可以使用this关键字调用本类中的构造方法
如果在类中有多个构造方法的话,可以利用this关键字互相调用.
还有就是this()调用构造方法的话,必须放在构造方法的首行!并且this(参数)也只能放在构造方法首行,放在其他方法首行也会报错!
还有就是,调用本类中的构造方法时,不能自己调用自己,至少有一个构造方法不用this()调用,不然会出现递归或者死循环!
举例:
public class This1 {
public static void main(String[] args) {
Person5 person5 =new Person5("nishuibaichuan", 21);
System.out.println(person5.getIofe());
}
}
class Person5{
private String name;
private int age;
public Person5(){
System.out.println("this调用本类中构造方法!");
}
public Person5(String name){
this();//this调用本类中无参构造方法
this.name = name;
}
public Person5(String name,int age){
this(name);//this调用本类中含有一个参数构造方法
this.age = age;
}
public String getIofe(){
return "姓名:" + this.name + ",年纪:" + this.age;
}
}
运行结果:
this调用本类中构造方法!
姓名:nishuibaichuan,年纪:21
(3)this代表当前对象(重点)
当前对象:当前正在调用方法的对象;
举例:
public class This2 {
public static void main(String[] args) {
Person6 per1 = new Person6();//实例化对象per1
Person6 per2 = new Person6();//实例化对象per2
System.out.println("main()中--->" + per1);//直接打印对象
per1.show();//当前调用方法的对象为per1
System.out.println("main()中--->" + per2);//直接打印对象
per2.show();//当前调用方法的对象为per2
}
}
class Person6{
public String show(){
System.out.println("Person6类--->" + this);
return null;
}
}
运行结果:
main()中--->Nisbc.club.Person6@3bc257
Person6类--->Nisbc.club.Person6@3bc257
main()中--->Nisbc.club.Person6@153f67e
Person6类--->Nisbc.club.Person6@153f67e
4. 对象的比较
可以使用this和引用传递进行两个对象是否相等的判断.
地址相等,则两个对象相等,如果地址不相等,则依次判断每一个属性的内容来判断其是否相等.
举例:
public class This4 {
public static void main(String[] args) {
Person8 per1 =new Person8("nishuibaichuan", 21);
Person8 per2 =new Person8("nishuibaichuan", 21);
if(per1.compare(per2)){
//per1为当前对象,per2为传入对象
System.out.println("两个对象相等");
}
else{
System.out.println("两个对象不相等");
}
}
}
class Person8{
private String name;private int age;
public Person8(String name,int age){
this.setName(name);this.setAge(age);
}
public boolean compare(Person8 per){
//调用此方法时,里面存在两个对象:当前对象,传入对象
Person8 per1 = this;//当前对象,就表示per1
Person8 per2 = per;//传入对象,就表示per2
if(per1 == per2){//判断是不是同一个对象,看他们的地址是否一样
}return true;
//之后分别判断每一个属性是否相等if(per1.name.equals(per2.name) && per1.age == per2.age){
}return true;
else{
return false;
}
}
public String getName() {
}return name;
public void setName(String name) {}this.name = name;
public int getAge() {}return age;
public void setAge(int age) {this.age = age;
}
}