JVM加载机制之常见面试题

JVM加载机制之常见面试题

import java.util.UUID;

public class Test_1 {

    public static void main(String[] args) {
        /**
         * JVM懒加载模式用到时才加载
         * 调用Test_1_B。str时并没有用到Test_1_B类所以不加载Test_1_B类的静态代码块
         * 直接通过调用Test_1_B,superClass找到父类str属性
         * Test_1_A的静态代码块没有执行,因为Test_1_A的str变量是直接引用指向所以不主动加载Test_1_A类,直接去内存地址获取str指向的值
         * 如果Test_1_A的str值是间接引用指向(非静态变量)JVM就主动加载Test_1_A类,静态代码块就会被执行
         */
        System.out.println(Test_1_B.str);

    }


}

class Test_1_A {


    /**
     * 静态变量在JVM准备阶段直接赋值给变量,如果是非静态变量就赋予初始值
     * (int a=10或直接声明 为 a=0)间接引用指向(运行时常量池引用)
     * (static  int a=10 为 a=10) 直接引用指向(内存地址)
     */
    public static final String str = "Test_1_A str";


    /**
     * 这种赋随机值的情况,就算是用static修饰的也会引起JVM的主动加载,因为UUID.randomUUID()不是直接引用
     */
    //public  static  final  String   str = UUID.randomUUID().toString();

    /**
     * 主动加载时执行静态代码块
     */
    static {
        System.out.println("Test_1_A");
    }

}


class Test_1_B extends Test_1_A {

    /**
     * 静态代码块在JVM没有主动加载的时候不执行
     */
    static {
        System.out.println("Test_1_B");
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值