对象的创建过程
假如我们new T()对象 首先java.c 编译成。class 字节码 然后将字节码Load到内存 这里会进行双亲委派的过程 如果这个类被加载过,在缓存中 , 那么直接加载, 否则会逐层向上查询是否被加载 首先是application 然后是extention (引用包)最后是bootstrap lib包 若顶级父加载器没有加载 那么会逐层向下 让其取加载 类加载完成后进行字节码的验证(也就是linking中的verification) 判断是否是以cafebabe 开头的16进制字节码 通过校验后 进入perpartion 将类的静态变量初始化为默认值 static int a=3 此时a =0 后面进入resolution 进行解析 将符号引用转换为直接引用 最后进入initializing 为静态变量附初始值 此时 a=3 执行静态代码块 4然后申请对象内存 5成员变量附默认值 int i=8 先将i=0 6调用构造方法 在字节码层面<init> 6.1在调用构造方法的时候 才会给成员变量附初始值 6.2执行构造方法语句 首先会调用super() 先调用父类的构造器

浙公网安备 33010602011771号