首页 > 代码库 > [java] java中的初始化顺序

[java] java中的初始化顺序

先看程序:

 1 package init_cls;
 2 
 3 class A{
 4 
 5     {System.out.println("i am in the class A!");}
 6     static { System.out.println("static is the class A");}
 7 }
 8 public class init_cls {
 9     {System.out.println("i am in the init_cls");}
10     static{System.out.println("i am static in the init_cls class");}
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13         
14         A a=new A();
15         init_cls c=new init_cls();
16     }
17 
18 }

运行结果为:

i am static in the init_cls class
static is the class A
i am in the class A!
i am in the init_cls

从结果中可以看到,当我们只是使用一个类中的方法的时候(在这里使用的init_cls中的main),只初始化静态变量,所以最先输出:i am static in the init_cls class

之后当实例化一个类A的时候,先初始化其中的静态域static ,所以输出:static is the class A

                                        之后初始化非静态域,所以输出:i am in the class A!

最后,只有当我们实例化init_cls类的时候,才初始化了类A中的非静态域,有了输出:i am in the init_cls

 

这些和python中的初始化顺序非常不同,在python中加载一个包的时候,会从上到下全部初始化,遇到语句时候全部执行

[java] java中的初始化顺序