重点:只要在类的方法中访问类中的属性,那么属性前一定要追加“this”关键字的形式
从this的实际使用来讲可以做三件事
1.调用本类属性
2.调用本类方法(基本、构造)
3.表示当前对象(相对概念)
使用this表示本类属性
范例:观察如下代码
class Person{
private String name;
private int age;
public Peron(){}
public Person(String n,int a) {
name=n;
age=a;
}
public void setName(String n) {
this.name=n;
}
public void setAge(int a) {
this.age=a;
}
public String getNmae() {
return name;
}
public int getAge() {
return age;
}
public String getInfo() {
return "姓名: "+name+" 年龄:"+age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person("张三",20).getInfo());
}
}
结果为 姓名: 张三 年龄:20
因为当前构造方法的核心目的在于:为类中的name和age两个属性进行初始化 但是如果构造方法的参数声明不准确(不清晰),所以最好的做法就是将参数名称与属性名称统一起来,可是一旦统一起来就如下
public Person(String name,int age) {
name=name;
age=age;
}
结果 姓名: null 年龄:0
★原本想法是把Person类构造方法中的name赋值给类中封装中的name,age类同
可是 Person类构造方法中的参数name是定义在 “{}”之中的 机器会遵循就近原则
所以 “=”号左边的对象name就不会找类中封装的name而是选择就近的参数name
为了解决这个问题我们可以在属性前面使用this关键字来表示本类属性
//this.+属性,当前对象中的属性
代码如下
class Person{
private String name;
private int age;
public Person() {};
public Person(String name,int a) {
this.name=name;
this.age=age;
}
public void setName(String n) {
this.name=n;
}
public void setAge(int a) {
this.age=a;
}
public String getNmae() {
return this.name;
}
public int getAge() {
return this.age;
}
public String getInfo() {
return "姓名: "+this.name+" 年龄:"+this.age;
}
}
public class StringDemo {
public static void main(String args[]) {
System.out.println(new Person("张三",20).getInfo());
}
}
只要在类的方法中访问类中的属性,那么属性前一定要追加“this”关键字的形式