首页 > 代码库 > More on Class Loading and Initialization
More on Class Loading and Initialization
上一篇博客中对于类的加载和初始化进行了详细的说明,但上一篇博客代码中的main()所在的类为导出类,
对其中一些问题的理解可能会引起误导和不明确,所以补充这篇博客进一步说明。以下面的代码为例进行说明:
//File: P130_Practice5.py //Author: lxw //Time: 2014-05-31 //Usage: P130 Practice 5. class A{ static B b = new B(); public A(){ System.out.println("A constructor."); } } class B{ public B(){ System.out.println("B constructor."); } } class C{ public C(){ System.out.println("C constructor."); } public void show(){} } class E{ static int i = print("WARNING."); public E(){ System.out.println("E constructor."); } static int print(String s){ System.out.println(s); return 1; } } class D extends A{ B b = new B(); static C c = new C(); } public class P130_Practice5 { public static void main (String [] args){ D d = new D(); // 顺序是: 先是加载完需要的类(只加载需要的类),然后才执行初始化。 //D.c.show(); // 只加载 E e = new E(); // 顺序是: 先是加载完需要的类(只加载需要的类),然后才执行初始化。 } }
Output:
lxw@23:53:04:~/eclipse/java/javaComLine$ java P130_Practice5 B constructor. C constructor. A constructor. B constructor. WARNING. E constructor.
需要注意的是:
B constructor. -- 加载类A
C constructor. -- 加载类D
A constructor. -- A()
B constructor. -- 初始化类D
WARNING. -- 加载类E
E constructor. -- E()
所以我们可以看出对于每一条语句的执行,类的加载和初始化的顺序是:先加载完所有需要的类(只加载“需要”的类,
不需要的不加载),然后才执行初始化。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。