欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java类加载,

来源: javaer 分享于  点击 40258 次 点评:126

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("这里不会打印");

}

}

}

相关文章

    暂无相关文章
相关栏目:

用户点评