this关键字
this关键字可以说是Java里比较复杂的关键字,因为this有一个核心概念,表示当前对象,而这个当前对象很难理解。
1.this调用属性
构造方法中参数的目的是为了类中的属性初始化,那么方法中的参数名称最好与类中的属性名称相同。这时需要this关键字。比如:
public Test(String name){
this.name=name;
}
若直接name=name则不能完成赋值操作;在Java程序里,以大括号{}为界限,如果属性名称与参数名称发生重名且没有加入任何的限制,指的都是最近的{}内的变量名称,所以为了可以明确的找到要访问的变量属于类中的属性的时候需要加上this。
所谓的this就是明确的标记本类的结构,而在本类中除了属性还有方法(普通方法,构造方法),;利用this 还可以调用本类的方法。
2.this调用方法(普通方法,构造方法)
调用普通方法时为了代码的严谨性,一定要加上this. ,构造方法的相互调用也可通过this实现,格式“this(参数,参数…)”,例如:
public Book(){
代码1;
代码2;
…
代码20;
}
public Book(String title){
this() //调用本类的无参构造方法
this.title=title;
}
public Book(String title, double price){
this(title); //调用本类的单参数构造方法
this.price=price;
这样写最大化减少了重复的代码。
但是会存在一些限制:
1.使用“this()”调用构造方法形式的代码只能放在构造方法的首行(构造能调用普通,普通不能调用构造);
2.进行构造方法相互调用的时候一定要保留调用的出口,比如上面的无参构造方法若变成:
public Book(){
this(“hello”,99.9);
代码1;
代码2;
…
代码20;
}
虽然满足放在了构造方法的首行,但是因为没有保留出口陷入了死循环会让代码报错:“递归构造调用”。也就是说使用this相互调用构造的时候,至少保留一个构造方法没有使用this调用其他构造的情况。
下面再通过一段代码加深this调用构造方法简化代码的思想:
public Emp(){
this(0,”无名氏”,0.0,”未定”);
}
public Emp(int empno){
this(empno,”临时工”,800.0,”后勤”);
}
public Emp (int empno,String ename){
this(empno,ename,2000.0,”技术部”);
}
public Emp(int empno,String ename,double sal,String depart){
this.empno=empno;
this.ename=name;
this.sal=sal;
this.depart=depart;
}
3.利用this表示当前对象
当前对象指的就是当前正在调用类中方法的对象。