虚拟机不会初始化类的三种情况

子类使用父类的静态字段时,只有直接定义这个字段的父类会被初始化。

public class JVMTest {
    public static void main(String[] args) {
        System.out.println(Son.a);
    }
}

class Father{
    public static int a=1;

    static {
        System.out.println("父类初始化");
    }
}

class Son extends Father{

    static {
        System.out.println("子类初始化");
    }
}

结果:子类未被初始化

在这里插入图片描述


通过数组定义来使用类。

定义单独一个对象

public class JVMTest {
    public static void main(String[] args) {
        Father father=new Father();
    }
}

class Father{
    public static int a=1;

    static {
        System.out.println("父类初始化");
    }
}

父类被初始化了
在这里插入图片描述
通过数组定义

public class JVMTest {
    public static void main(String[] args) {
        Father[] fathers=new Father[10];
    }
}

class Father{
    public static int a=1;

    static {
        System.out.println("父类初始化");
    }
}

不会初始化
在这里插入图片描述


常量在编译期会存入调用类的常量池,因此不会初始化定义常量的类。

public class JVMTest {
    public static void main(String[] args) {
        System.out.println(Father.b);
    }
}

class Father{
    public static int a=1;
    public static final int b=1;
    static {
        System.out.println("父类初始化");
    }
}

定义常量b的Father类没有被初始化
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值