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日

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码