[关闭]
@lzb1096101803 2016-04-10T12:34:51.000000Z 字数 1646 阅读 447

Java类加载机制

电话面试


http://www.tuicool.com/articles/QZnENv

加载-验证-准备-解析-初始化-使用-卸载
验证、准备和解析这三个部分统称为连接(linking) 。
加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的“开始”(仅仅指的是开始,而非执行或者结束,因为这些阶段通常都是互相交叉的混合进行,通常会在一个阶段执行的过程中调用或者激活另一个阶段),而解析阶段则不一定(它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定。

各个阶段

何时开始类的初始化

被动引用

例子:

    class SuperClass {
      static {
        System.out.println("superclass init");
      }
      public static int value = 123;
    }

    class SubClass extends SuperClass {
      static {
        System.out.println("subclass init");
      }
    }

    public class Test {
      public static void main(String[] args) {
        System.out.println(SubClass.value);// 被动应用1
        SubClass[] sca = new SubClass[10];// 被动引用2
      }
    }

程序运行输出 superclass init
123
从上面的输入结果证明了被动引用1与被动引用2

class ConstClass {
  static {
    System.out.println("ConstClass init");
  }
  public static final String HELLOWORLD = "hello world";
}

public class Test {
  public static void main(String[] args) {
    System.out.println(ConstClass.HELLOWORLD);// 调用类常量
  }
}

程序输出结果
hello world
从上面的输出结果证明了被动引用3

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注