上一篇博客中对于类的加载和初始化进行了详细的说明,但上一篇博客代码中的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 ;
}
}
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@:::~/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()
所以我们可以看出对于每一条语句的执行,类的加载和初始化的顺序是:先加载完所有需要的类(只加载“需要”的类,
不需要的不加载),然后才执行初始化。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章