引出this关键字
需求:定义一个user类,有name、age字段,相应的getter/setter方法,并且创建对象,设置对象的name、age数据,打印。
// 需求
class User{
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;//把调用者传递的参数name赋值给name字段
}
//省略age的get/set方法
public void show(){
system.out.println(this.name+";"+this.age);
}
}
this出现的位置
- 构造器中:表示当前创建的对象
- 方法中:哪一个对象调用this所在的方法,this就表示哪一个对象
当一个对象被创建时,jvm会分配一个引用自身的引用:this
User u1 = new User();
u1.setName("lucy");
u1.show();//此时show方法中的this就是表示u1
this的使用场景
- 解决成员变量和局部变量(参数)之间的二义性
如上所述,避免混淆 - 同一个类中实例方法之间的调用(可省略-不推荐省略) ;
class User{
public void show(){
system.out.println(this.name+";"+this.age);
}
public void sayHello(){
system.out.println("hello");
this.show();
}
}
public static void main(String[] args){
User u1 = new User();
u1.setName("lucy");
u1.setAge(11);
//此时sayHello()中this是u1对象,show()中的this是调用show方法的对象
u1.sayHello();
}
- 将this作为参数传给另外一个方法
在java的String类中的一个方法
- 将this作为方法的返回值(链式方法编程)
- 构造器重载的互调,this()必须写在构造方法的第一行
代码重复会导致维护性低
构造器中只能调用一个重载的构造器(少参数调用多参数)
一般多参数考虑的未知的参数更多–功能更强大
class User{
//默认构造器:
User(){
}
//创建对象,初始化name
User(String name){
this(name,0);//表示在调用参数为String\int类型的构造器
}
//创建对象,初始化name、age
User(String name,int age){
this.name = name;
this.age = age;
}
}
例如arrays的方法重载
- static和this不能同用 ;
ps:在字节码被加载进虚拟机JVM时,static成员已经存在,但此时对象还没有被创建,此时还没有对象–也就不会有this(当前对象)