调用一个类的静态方法 会不会加载这个类到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无用
悬赏问题
- ¥30 Matlab打开默认名称带有/的光谱数据
- ¥50 easyExcel模板 动态单元格合并列
- ¥15 res.rows如何取值使用
- ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
- ¥15 CSP算法实现EEG特征提取,哪一步错了?
- ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
- ¥15 vue3前端取消收藏的不会引用collectId
- ¥15 delphi7 HMAC_SHA256方式加密
- ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
- ¥15 下列c语言代码为何输出了多余的空格