this关键字有三个用途:
a.this调用本类属性
b.this调用本类方法
c.this表示当前对象
this调用本类属性
class Person{
private String name;
private int age;
public Person(String name,int age){
name = name ;
age = age ;
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
以上代码通过构造方法对属性进行赋值,但是你会发现当参数与属性名相同时,并不能正确赋值,此时我们需要加上this关键字给对象属性赋值
this.name = name;
this.age = age;//只要是在类中方法访问类中属性一定要加上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 ;
this.Print();//调用普通方法
}
public void Print(){
System.out.println("这是一个普通方法");
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
2、调用构造方法:this(参数)
调用构造方法 this(参数)
class Person{
private String name;
private int age;
public Person(){
System.out.println("产生新的Person对象");
}
public Person(String name){
System.out.println("产生新的Person对象");
this.name = name ;
}
public Person(String name, int age){
System.out.println("产生新的Person对象");
this.name = name;
this.age = age;
}
public String getPersonInfo(){
return "姓名:" + name + ",年龄:"+age;
}
}
public class Test{
public static void main(String[] args) {
Person per = new Person();
Person per1 = new Person("张三");
Person per2 = new Person("张三",23);
System.out.println(per.getPersonInfo());
System.out.println(per1.getPersonInfo());
System.out.println(per2.getPersonInfo());
}
}
对以上代码进行修改
public Person(){
System.out.println("产生新的Person对象");
}
public Person(String name){
this();
this.name = name ;
}
public Person(String name, int age){
this(name);
this.name = name;
this.age = age;
}
this调用构造方法时必须注意:
a.this调用构造方法的语句必须放在构造方法的首行
b.使用this调用构造方法时,必须留有出口(不能成环)
this表示当前对象
class Person{
public void Print(){
System.out.println("普通方法"+this);
}
}
public class Test{
public static void main(String[] args) {
Person per1 = new Person();
System.out.println("主方法"+per1);
per1.Print();
Person per2 = new Person();
System.out.println("主方法"+per2);
per2.Print();
}
}
只要对象调用了本类中的方法,this就表示当前执行的对象