前段时间看了一下关于java ClassLoader的问题,突然想问一下类的载入顺序问题,import java.test.A;
import java.test.B;
import java.test.C;
import java.test.D;Class Son extends Father
{
    A a;
    static B b;
    static C c = new C();
    D d = new D();
}在这里想问一下,
1.在Son类载入时,Father类会先载入吗?
2.所谓的载入类,到底是载入什么内容呢,仅仅是将.class的文件通过JVM读取到ClassLoader中吗?
3.这里Son类中的成员a、b、c、d在载入时,相关联的A、B、C、D类定义会载入ClassLoader吗?还是仅仅有static定义的静态成员才会被载入,或者说只有new操作的才能载入?
这种情况好像很难测试出来,因为类的载入和成员初始化是两个步骤,无法确认载入时做了哪些动作。还请各位大虾指教。

解决方案 »

  1.   

    很容易测试呀类也有初始化呀     static{
            //类初始化
        }回答
    1. 当然会
    2. 就是把类的结构读入内存吧
    3. 用到的都会加载,和static无关
      

  2.   

    1、会
    2、读取.class文件到方法区,并在堆上创建该类的Class对象。
    3、类A、B不会载入,类C、D会载入
    在下面情况下会载入:创建类的对象、调用类的静态方法,访问类的静态成员、调用Class.forName()静态方法,构造该类的子类对象、启动虚拟机的标志类。详情请参阅java相关文档:类的初始化、对象的初始化。 谢谢!
      

  3.   

    ClassLoader加载用的是全盘负责委托机制。
    即ClassLoader在加载一个Class的时候会将改Class所依赖和所引用的所有类也由这个ClassLoader负责载入,除非显式指定其它。