1.什么是this
表示当前对象,什么优势当前对象.this主要存在于两个位置:
构造器中: 就表示当前创建的对象.
方法中: 哪一个对象调用this所在的方法,那么此时this就表示哪一个对象.
当一个对象创建之后,JVM会分配一个引用自身的引用:this.
2.使用this
① 解决成员变量和参数(局部变量)之间的二义性,必须使用;
public class ThisDemo
{
private int age;
private String name;
public void setAge(int age){
this.age = age; //把调用者传递的age赋值给字段age
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name; //把调用者传递的name赋值给字段name
}
public String getName(){
return name;
}
public static void main(String[] args){
ThisDemo demo = new ThisDemo();
demo.setAge(18);
demo.setName("杨哥");
System.out.println(demo.getAge());
System.out.println(demo.getName());
}
}
② 同类中
实例方法间互调(此时可以省略this,但是不建议省略)。
public class ThisDemo
{
private int age;
private String name;
public void setAge(int age){
this.age = age; //把调用者传递的age赋值给字段age
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name; //把调用者传递的name赋值给字段name
}
public String getName(){
return name;
}
public void show(){
System.out.println("hello");
}
public void sayHello(){
show(); // 也可以省略this,不建议
this.show(); //调用本类中的方法
}
public static void main(String[] args){
ThisDemo demo = new ThisDemo();
demo.sayHello();
}
}
③ 将this作为参数传递给另一个方法;
④ 将this作为方法的返回值(链式方法编程);
⑤ 构造器重载的互调,this([参数])必须写在构造方法第一行;
上面的代码,没问题:
但是:存在一些问题.
1):代码功能重复? this.name = name;
2):重复会导致代码维护性低.
所以修改如下:
但是当多个构造器重载时,或者多个方法重载时,一般的,我们是少参数的调用多参数的.
----------------------------------------------------
因为参数越多,该方法考虑的未知的因素也越多,也就是说功能更强大.JDK中的类也是这么设计的
⑥ static不能和this一起使用;
当字节码被加载进JVM,static成员已经存在了.
但是此时对象还没有创建,没有对象,就没有this.