一:函数public static void main(String[] args)作为程序的入口,在执行时对于该类, 会先加载该类的静态对象/静态域/静态变量,然后进入该函数执行(毕竟没有用new创建该类的对象,因此不会加载非静态对象/非静态变量以及构造函数)
二:初始化一个类时,即用new创建一个类时,初始化顺序
1,按顺寻初始化一个类中的静态对象/静态域/静态变量(当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时,静态初始化都初始化一次)
2,按顺序初始化一个类中的非静态对象/非静态变量
3,初始化构造函数
在初始化一个对象时,要对定义对象的类进行初始化操作(按上面三个步骤)
初始化一个对象前,应先初始化其父类
结果:
test2 f()
0
test1
test2
test2 f()
0
test1
test2
test
end
二:初始化一个类时,即用new创建一个类时,初始化顺序
1,按顺寻初始化一个类中的静态对象/静态域/静态变量(当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时,静态初始化都初始化一次)
2,按顺序初始化一个类中的非静态对象/非静态变量
3,初始化构造函数
在初始化一个对象时,要对定义对象的类进行初始化操作(按上面三个步骤)
初始化一个对象前,应先初始化其父类
参考下面程序:
public class test {
int a = 0;
test1 t = new test2();
static test1 t1 = new test2();
test(){
System.out.println("test");
a = 8;
}
void f() {
System.out.println("test f()");
System.out.println(a);
};
public static void main(String[] args){
new test();
System.out.println("end");
}
}
class test2 extends test1 {
int a = 0;
test2() {
a = 8;
System.out.println("test2");
}
void f() {
System.out.println("test2 f()");
System.out.println(a);
};
}
abstract class test1 {
test1(){
f();
System.out.println("test1");
}
abstract void f() ;
}
结果:
test2 f()
0
test1
test2
test2 f()
0
test1
test2
test
end