2019-12-29

package com.test.cn;

//常量在编辑阶段存入到调用这个常量的方法所在的类的常量池中

//本质上,调用类并没有直接引用到的定义常量的类,因此并不会触发

//定义常量的类并没有初始化

//注意:这里指的是常量存放到Mytest2的常量池中,之后的Mytest2Myprent2就没有任何关系了

//甚至,我们可以将parent2class文件

/**

 * 助记符:

 * ldc表示将intfloat或是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");

 }

}

你可能感兴趣的:(2019-12-29)