1.this的引出
public class A
{
public static void main(String args[])
{
Dog dog=new Dog("老王",18);
}
}
class Dog{
String name;
int age;
public Dog(String Dname,int ages){
name=Dname;
age=ages;
}
}
看一下
Dog的自定义构造器
public Dog(String Dname,int ages){
name=Dname;
age=ages;
}
这样写参数列表必须和属性不同名
如果可以
public Dog(String name,int age){
name=name;
age=age;//注意,这种写法是错误的因为就近原则
}
就好了,但是是错误写法
这么把它变成
属性的name=方法里的参数name
这里就要用到this关键字了
2.this
public Dog(String name,int age){
this.name=name;
this.age=age;
}
这样就可以完美解决上面的问题
this.属性
代表当前对象的属性
在内存中看,是堆中创建个变量指向自己(默认生成)
this对应当前对象
dog1里的this是dog1
dog2里的this是dog2
是区分开的
什么叫当前对象
就是谁调用构造器设就是当前对象
例如
Person p1=new Person("xiaoyuan",18);
//相当于p1指向的空间是当前对象,当然你也可以理解为p1是当前对象
//当它执行构造方法时
//里面的this.name和this.age被替换成了p1.name和p1.age
//当然你创建别的对象也会替换成对应的
3.this使用注意细节
简单来时,哪个对象调用,this就代表哪个对象
细节1和细节2
防止属性和局部变量的重名
导致调用不了属性
细节3可以在继承中用本类方法而不是调用子类的继承方法(重点)
细节4
只能在构造器里调用重载的构造器(不能在成员方法掉构造器)
!!!调用的构造器必须放在第一句
而且只写this();
这里体现一下构造器里调用构造器的好处
实现的是对job,salary
name,gender,age
和五个变量一起
所以可以先定义少的构造器
而后全部一起的调用这个构造器,可以减少一定代码量
class Employee{
String name;
char gender;
int age;
String job;
String salary;
public Employee(String job,String salary){
this.job=job;
this.salary=salary;
}
public Employee(String name,char gender,int age){
this.name=name;
this.age=age;
this.gender=gender;
}
public Employee(String name,char gender,int age,String job,String salary){
this(name,gender,age);//调用一个构造器
this.job=job;
this.salary=salary;
}
}
可以减少代码量
细节5
this与对象关联
都是在堆里面的



