【发布时间】:2019-06-05 05:45:10
【问题描述】:
假设我有一个可运行的 jar (A.jar),其中包含 .class 文件。我还有另一个可运行的 jar (B.jar),它与 A.jar 相同,但访问修饰符全部更改为 public(对于字段和方法)。是否有可能更改某些语义?它(B.jar)的工作方式是否与前一个(A.jar)完全相同?有什么危害?
编辑示例: A.jar 包含字节码(.class 文件)。我使用 asm 库对其进行解析,并将其所有修饰符更改为 public。生成的 jar 是 B.jar 文件。
【问题讨论】:
-
A.jar 包含字节码(.class 文件)。例如,我使用 asm 库对其进行解析,并将其所有修饰符更改为 public。生成的 jar 是 B.jar 文件。 (它还包含 .class 文件)
-
嗯,会破坏的一件事是反射代码,它期望
IllegalAccessError发生,因为它不再被抛出。此外,列出具有某些修饰符的构造的反射代码的结果会发生变化。 -
你想做什么?
-
我正在尝试静态内联某些调用站点,并且在不将访问修饰符更改为公共的情况下,某些内联将失败并在运行修改后的 jar 时抛出非法访问
标签: java jvm bytecode semantics access-modifiers