对象创建的过程:
创建一个对象分为如下四步:
1. 分配对象空间,并将对象成员变量初始化为0或空
2. 执行属性值的显示初始化
3. 执行构造方法
4. 返回对象的地址给相关的变量
使用new会去调用构造器。
this的本质: 创建好的对象的地址
用法一:
由于在构造方法调用前,对象已经创建。因此,在构造方法中可以使用this代表当前对象。
public class User {
int id;
String name; //账户名
String pwd; //密码
public User() {
}
public User(int id, String name) {
System.out.println("正在初始化已经创建好的对象:"+this);
this.id = id; //不写this,无法区分局部变量id和成员变量id
this.name = name;
}
public void printMes(){
System.out.println(this.name+",正在登录!"); //不写this也可以
}
public static void main(String[] args) {
User u = new User(007,"Tom");
System.out.println("打印对象地址:"+u);
u.printMes();
}
}
用法二:
使用this关键字调用重载的构造方法,避免相同的初始化代码。
但只能在构造方法中使用,并且必须位于构造方法的第一句。
public class Test {
int a, b, c;
Test() {
System.out.println("正在初始化");
}
Test(int a, int b) {
// Test(); //这样是无法调用构造方法的
this(); // 调用无参的构造方法,并且必须位于第一行
a = a;// 这里都是指的局部变量而不是成员变量
// 这样就区分了成员变量和局部变量.
this.a = a;
this.b = b;
}
Test(int a, int b, int c) {
this(a, b); // 调用有参的构造方法,并且必须位于第一行
this.c = c;
}
void study() {
System.out.println("学习");
}
void eat() {
this.study(); // 调用本类中的study();也可以就写成study();
System.out.println("吃饭");
}
public static void main(String[] args) {
Test t = new Test(1, 2);
t.eat();
}
}