Jvm类加载

jvm类加载:

​ 类加载的时间:按需加载,运行期间

​ 常量:final static 在准备阶段进行赋值

​ 类变量:static 准备阶段为null或者0之类的,初始化阶段进行赋值

​ 变量:创建对象的时候进行赋值

​ 创建对象的步骤:

​ 举例:new 类名

​ 1.根据new的参数在常量池中定位一个累的符号引用,

​ 2.如果没有找到这个符号引用,说明类还没有被加载,则进行类的加载、解析和初始化

​ 3.虚拟机为对象分配内存(位于堆中)

​ 4.将分配的内存初始化为0值(不包括对象头)

​ 5.调用对象的init()方法

​ 对象头:

​ 用于存储对象自身的运行时数据,如哈希码,GC分代年龄、锁状态标识、线程持有的锁、偏向线程ID、偏向时间戳等。另一部分是类型指针Java对象大小之类。

​ 实例数据:

​ 有效信息

​ 对齐填充:

​ 不是必须

​ 静态代码块:初始化阶段

​ 普通代码块:创建对象的时候

​ 构造器:创建对象的时候

public class Test01 {
    public static void main(String[] args) {
        System.out.println(B.str);
    }
}

class A {
    public static  String str = "qwer";
    static {
        System.out.println("A....");
    }
}
class B extends A{
    //public static String str="yuyu";
    static {
        System.out.println("B...");
    }
}

结果如下:如果没有注解则子类和父类的静态代码块都会输出,表明两个类都加载了。

A....
qwer

Process finished with exit code 0

分析:在继承关系当中,先加载的是父类的类变量,然后才是子类的类变量,准备阶段在子类中找不到,则会在父类中查找,找到后进行类加载,初始化,得到结果。

类加载器:

​ 通过一个类的全限定名来获取描述该类的二进制字节流的这个动作的“代码”被称为“类加载器”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值