对象的创建过程

 

 

假如我们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() 先调用父类的构造器

 

posted @ 2022-04-25 09:08  花心大萝卜li  阅读(89)  评论(0)    收藏  举报