java类加载,
java类加载,
类加载的过程:
一:载入
1.根据类的全名去读取该类的class文件的二进制字节流。
2.分析该二进制流,并将其转为表示该类的信息的数据结构,存入方法区。
3.产生该类的java.lang.Class的实例。
二:链接
1.verification:验证。检验该类的二进制的结构是否正确(如类型是否正确,属性如private,public等是否正确),若有问题,
则抛出异常。
2.preparation:准备。给静态域分配空间,赋予默认值(但不会初始化,因为此时不会有java代码的执行)。被final修饰的静态变量直接赋予原值。
3.resolve:解析。将常量池中的符号引用变为真正的引用?(不太懂)。可以认为是静态绑定,如静态方法,final方法,以及构造函数。这个过程可以在初始化后进行。
三:初始化
类的初始化会在类第一次使用时发生。其过程主要是静态域和静态代码块的初始化。会按代码顺序依次往下执行。还会执行构造函数。
初始化的场景:
1.创建对象。有new字符的。
2.给静态变量赋值以及使用静态变量。(final修饰的不算)StringUtil.url = "www.bac.com";
3.访问静态方法。
4.创建该类的子类变量时。(子类初始化时,先看其父类有无初始化,若无,则初始化)
5.有main函数的类。
调用反射的API也可能造成类或接口的初始化。
当访问一个类的静态变量时,只会初始化实际定义这个静态变量的类。如
Class Test {
public static void main(String args) {
System.out.println(B.a);//打印出来100.
}
class A{
public static int a = 100;
System.out.println("这里会打印");
}
class B {
static {
system.out.println("这里不会打印");
}
}
}
相关文章
- 暂无相关文章
用户点评