[java] java中的初始化顺序

Posted wilderness

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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中的初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章

java中的一些执行顺序,代码块,静态,构造,成员。。。。(转的)

Java类继承关系中的初始化顺序

Java中代码块执行顺序

Java的初始化过程

java中的静态代码块、代码块、构造器的执行顺序是怎样呢,这三者有啥作用呢

java中的初始化顺序,静态块内的构造函数