常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中,本质上 ,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类的初始化。
助记符:
ldc:表示将int,float或是String类型的常量值从常量池推送至栈顶
bipush:表示将单字节(-128~127)short类型的常量值推送至栈顶
sipush:表示将一个短整型常量(-32768~+32767)推送至栈顶
iconst_1、iconst_2、iconst_3、iconst_4、iconst_5:表示将int类型的1,2,3,4,5推送至栈顶。到6时就用bipush了。(iconst_m1~iconst_5)
iconst_m1表示将int类型的-1推送至栈顶 。
栈顶:虚拟机栈的一个操作数栈
anewarray:表示创建一个引用类型的(如类、接口、数组)数组,并将其压入栈顶
newarray: 表示创建一个指定的原始类型(如int、float、char等)的数组 ,并将其引用值压入栈顶
当一个常量的值并非编译期间可以确定的,那么其值就不会放到调用类的常量池中,这时在程序运行时,会导致主动使用这个常量所在的类,显然会导致该类被初始化
对于数组实例来说,其类型是由jvm在运行期动态生成的,动态生成的类型,其父类型就是Object。
对于数组来说,动态生成的类型,其父类型就是Object。
对于数组来说,JavaDoc经常将构成数组的元素为Component,实际上就是将数组降低一个维度后的类型
2132

被折叠的 条评论
为什么被折叠?



