1 对象创建的过程和this的本质
this的本质就是相当于口述中的我:
this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
2 this最常的用法:
1. 在程序中产生二义性之处,应使用this来指明当前对象;普通方法中,this总是指向调用该方法的对象。构造方法中,this总是指向正要初始化的对象。
2. 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句。
3. this不能用于static方法中。
3 this代表“当前对象”示例
public class User { int id; // id String name; // 账户名 String pwd; // 密码 public User() { } public User(int id, String name) { // super(); //构造方法的第一句总是super() this.id = id; //this表示创建好的对象。 this.name = name; } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; // System.gc(); } public static void main(String[] args) { User u1 = new User(); User u2 = new User(101, "张三"); User u3 = new User(100, "李四", "123456"); } }
4 this()调用重载构造方法
可以传参调用对应的本类方法
public class TestThis { int a, b, c; TestThis() { System.out.println("正要初始化一个Hello对象"); } TestThis(int a, int b) { // TestThis(); //这样是无法调用构造方法的! this(); // 调用无参的构造方法,并且必须位于第一行! a = a;// 这里都是指的局部变量而不是成员变量 // 这样就区分了成员变量和局部变量. 这种情况占了this使用情况大多数! this.a = a; this.b = b; } TestThis(int a, int b, int c) { this(a, b); // 调用带参的构造方法,并且必须位于第一行! this.c = c; } void sing() { } void eat() { this.sing(); // 调用本类中的sing(); System.out.println("你妈妈喊你回家吃饭!"); } public static void main(String[] args) { TestThis hi = new TestThis(2, 3); hi.eat(); } }
运行效果:
