package com.atzhangwl.jvm.classloader;

/**
* @ClassName Run_02
* @Description final修饰的变量会被存入调用这个常量的方法的常量池中,本质上调用类并没有直接引用到定义常量的类,因此并不会触发
* 定义常量类的初始化 注意:这里是将常量存放到了Run_02的main方法的常量池中,
* 之后Run_02与MyParent2没有任何关系,甚至我们可以将MyParent2.class文件删除
* <p>
* <p>
* 助记符:
* ldc : 表示将int、float或Sting类型的常量值从常量池中推送至栈顶
* bipush: 表示将单字节(-128 - 127)的常量值推送至栈顶
* sipush: 表示将一个短整形(-32768 - 32767)的常量值推送至栈顶
* iconst_1: 表示将int类型的1推送至栈顶 注意:iconst_1 到 iconst_5 为jvm虚拟机提供的特殊助记符
* @Author zhangwl
* @Date 2020/1/2 22:25
* @Version 1.0
**/
@SuppressWarnings("all")
public class Run_02 {

public static void main(String[] args) {
//运行结果:this static block is from parent
//parentStr_01
// System.out.println(MyParent2.parentStr_01);
// 运行结果:parentStr_02
// System.out.println(MyParent2.parentStr_02);
//
// System.out.println(MyParent2.short_val);
//
// System.out.println(MyParent2.int_val);
//
System.out.println(MyParent2.int_special_val);
}
}

@SuppressWarnings("all")
class MyParent2 {
public static String parentStr_01 = "parentStr_01";
//final修饰的变量会被存入调用这个常量的方法的常量池中
public static final String parentStr_02 = "parentStr_02";
public static final short short_val = 127;
public static final int int_val = 128;
public static final int int_special_val = 6;

static {
System.out.println("this static block is from parent");
}
}
posted on 2020-01-04 10:52  it_zhangwl  阅读(160)  评论(0编辑  收藏  举报