概述
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");
}
}
最后
以上就是可耐芝麻为你收集整理的JVM加载机制之常见面试题的全部内容,希望文章能够帮你解决JVM加载机制之常见面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复