qq_36433118 2021-12-22 18:06 采纳率: 100%
浏览 32
已结题

调用一个类的静态方法 会不会加载这个类到JVM?

调用一个类的静态方法 会不会加载这个类到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修饰,则还是会触发类加载

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月22日

悬赏问题

  • ¥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之后自动重连失效