}
class MyParent2{
public static final String str = "hello world ";
static {
System.out.println(“MyParent2 static block”);
}
}
输出的结果就是 :hello world
注意我们在str变量的修饰上加了final修饰符,如果我们不加final修饰符,那么打印的结果会是:
MyParent2 static block
hello world
加了final关键字之后str就会变成常量:
常量在编译阶段会存入到调用这个常量方法所在的类的常量池中
本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类的初始化
注意:我们指的是将常量存放到了Mytest2的常量池中,之后Mytest2与MyParent2就没有任何关系了
甚至:我们可以将MyParent的class文件删除
我们可以试验一下:
程序照样输出 ,而且不会报错,这就验证了上边的介绍。
我们反编译一下Mytest2:
出现一个助记符ldc
助记符:
ldc:表示将int、float、或是String类型的常量从常量池中推送至栈顶。
其实还有其他的助记符:
bipush:表示将单字节(-128 ~ 127 )的常量推送到栈顶
sipush : 表示将一个短整型常量值(-32768 ~ 32767)推送到栈顶
iconst_1 表示将int类型1推送到栈顶(iconst_m1 – iconst_5)
这些助记符其实可以在jdk的com.sun.org.apache.bcel.internal.generic里边可以看到对用的类,是从apache基金会吸收过来的。
作者:魔鬼_
blog.csdn.net/wzq6578702/article/details/79370149
往期精选 点击标题可跳转
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618164986)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!