调用一个类的静态方法 会不会加载这个类到JVM,怎么查看jvm是否有这个类?
4条回答 默认 最新
- 好烦吃不胖 2021-12-23 09:31关注
这个要对虚拟机有一定理解。 那么会不会加载呢? 答案是“一定会进行加载”。
虚拟机规范中没有明确规定类何时进行加载,由各虚拟机厂商自行去实现,但是虚拟机规范中有明确的规定,在类初始化时要求类必须先完成加载,所以我们可以从类初始化入手,我们只需要找到何时初始化,就间接知道了何时加载。 那么类何时初始化呢? 规范中规定有6种情况下,类必须初始化(也就等于必须加载),我不一一列举哪6中,我只说题主有关的这个。
当虚拟机遇到getstatic指令调用static方法时,一定会触发类初始化,也就是类一定会加载。另外补充一点getstatic指令不仅可以访问static方法,还可以用来访问static修饰的类变量,如果是仅仅访问变量,则要分情况,如果这个变量同时又被final修饰 比如
public static final String NAME="ZHANGSAN";
这种情况是不会触发类加载的,因为final修饰的变量在编译期间已经把字段值ZHANGSAN写入常量池,访问时直接是从常量池取得,无需加载类。如果没有被final修饰,则还是会触发类加载本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效