对象创建的过程:
1.分配对象空间,并将对象成员变量初始化为0或空
2.执行属性值的显式初始化
3.执行构造方法
4.返回对象的地址给相关变量
this表示当前方法所在的对象。
this的本质就是“创建好的对象的地址”,由于在构造方法调用前,对象已经创建,因此在构造方法中可以使用this代表“当前对象”。
this不能用于static方法中。
public class TestThis{
int a, b, c;
TestThis(int a, int b){
this.a = a;
this.b = b;
}
TestThis(int a, int b, int c){
this(a, b);//调用上面的构造函数赋值给a,b。构造器的调用必须位于第一句
this.c = c;
}
void sing(){
}
void eat(){
this.sing();//也可以使用sing();
}
public static void main(String[] args){
TestThis tt = new TestThis(1, 2, 3);
tt.eat();
}
}
this最常的用法:
1.在程序中产生二义性之处,应使用this来指明当前对象,普通方法中,this总是指向调用该方法的对象,构造方法中,this总是指向正要初始化的对象。
2.使用this关键字调用重载的构造方法,避免相同的初始化代码,但只能在构造方法中用,并且必须位于构造方法的第一句。
3.this不能用于static方法中。
static关键字:
1.在类中,用static声明的成员变量为静态成员变量,也成为类变量,类变量的声明周期和类相同,在整个应用程序执行期间都有效。
2.static修饰的成员变量和方法,从属于类,普通变量和方法从属于对象。
public class User{
int id;
String name;
String pwd;
static String company = "Union";//静态成员变量
public User(int id, String name){
this.id = id;
this.name = name;
}
public void login(){
System.out.println("登录"+name);
}
public static void printCompany(){
//login(); //调用非静态方法会报错。
System.out.println(company);
}
public static void main(String[] args){
User u = new User(101, "lirui");
User.printCompany();
User.company = "Union1";
}
}
静态初始化块:
构造方法用于对象的初始化,静态初始化块,用于类的初始化操作,在静态初始化中不能直接访问非static成员。
注意事项:
静态初始化块的执行顺序:
1.上溯到object类,限制性objec的静态初始化块,再向下执行子类的静态初始化块,直到我们的类的静态初始化块为止。
2.构造方法的执行顺序和上面的顺序一样。