[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中的一些执行顺序,代码块,静态,构造,成员。。。。(转的)