this关键字
用在类的实例方法或构造方法当中,表示对当前对象的引用,在类中,属性的名字可以和局部变量的名字相同。此时,如果直接使用名字来访问,优先访问局部变量。因此,需要使用this关键字表示对当前对象的引用,来访问属性。
//例子如下,新建一个Person类
public class Person{
//定义一些属性
public String name;
public int age;
public char gender;
public int weight;
public int height;
}
//在Program类当中,给Person类初始化赋值
public class Program{
//初始化赋值
public static void main(String[] args){
Person xiaoming=new Person();
xiaoming.age=18;
xiaoming.gender='male';
xiaoming.weight=18;
xiaoming.height=166;
}
}
!!上述 的方法会产生一个问题,就是当给多个对象赋值的时候,每一个属性都需要逐一赋值,操作过于麻烦。
改进:在Person类中添加一个方法:setInfo()
public class Person{
//定义一些属性
public String name;
public int age;
public char gender;
public int weight;
public int height;
public void setInfo(String n,int a,char g.int w,int h){
name=n;
age=a;
gender=g;
weight=w;
height=h;
}
}
public class Program{
public static void main(String[] args){
Person xiaoming=new Person();
xiaoming.setInfo("xiaoming",18,'male',74,166);
}
}
但是这种改进方法,参数的命名不够明确,不够直接明白。
改进:
public class Person{
//定义一些属性
public String name;
public int age;
public char gender;
public int weight;
public int height;
public void setInfo(String name,int age,char gender.int weight,int height){
this.name=name;
this.age=age;
this.gender=gender;
this.weight=weight;
this.height=height;
}
}
public class Program{
public static void main(String[] args){
Person xiaoming=new Person();
xiaoming.setInfo("xiaoming",18,'male',74,166);
}
}
参数的name,age,gender等是存储在栈上的,方法的执行是需要压栈的。而属性则是存储在堆中,所以,通过this对当前对象的引用,从而达到属性的初始化。
this 关键字也是可以省略的,当且仅当要访问的属性与局部变量不重名的时。this可以省略,否则不可以