Java对象初始化顺序

来源:互联网 发布:u8用友软件介绍 编辑:程序博客网 时间:2024/04/30 11:27
一:函数public static void main(String[] args)作为程序的入口,在执行时对于该类, 会先加载该类的静态对象/静态域/静态变量,然后进入该函数执行(毕竟没有用new创建该类的对象,因此不会加载非静态对象/非静态变量以及构造函数)

二:初始化一个类时,即用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

0 0
原创粉丝点击