package com.test.cn;
//常量在编辑阶段存入到调用这个常量的方法所在的类的常量池中
//本质上,调用类并没有直接引用到的定义常量的类,因此并不会触发
//定义常量的类并没有初始化
//注意:这里指的是常量存放到Mytest2的常量池中,之后的Mytest2与Myprent2就没有任何关系了
//甚至,我们可以将parent2的class文件
/**
* 助记符:
* ldc表示将int,float或是Sring类型的常量数值从常量池中推送至栈顶<即将要用的>
* bipush 表示将单字节(-128-127)的常量池推送至栈顶
* sipush表示将int一个短整型常量值(-32768-32767)
* iconst_i表示将int类型1推送至栈顶(iconst_1-iconst_5)
*/
public class Mytest2 {
public static void main(String[] args){
System.
out.println(MyParent2.i);
/**这个底层反编译的文件short
* public static void main(java.lang.String[]);
* Code:
* 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
* 3: bipush 127
* 5: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
* 8: return
* }
*/
System.out.println(MyParent2.m);
/**底层反编译的文件short位数不够,用int存放
* public static void main(java.lang.String[]);
* Code:
* 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
* 3: bipush 127
* 5: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
* 8: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
* 11: sipush 128
* 14: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
* 17: return
* }
*/
}
}
class MyParent2{
public static final String string="hello wrold";
public static final short i=127;
public static final short m=128;
// public static final int m=6;
static{
System.
out.println("MyParent2 static block");
}
}
网友评论