java - 类路径如何影响 *.class 文件

标签 java classpath

我有一些要编译的源代码文件。为此,我必须指定一个类路径,其中包含(通过指定 jar 的方式)所有使用的具有正确签名的类和方法。

假设我有两个不同的类路径,它们都会导致编译没有错误。这些类路径可能在 jar 的顺序、jar 的版本(例如旧版本的 commons 集合被新版本替换)或不必要的 jar 的存在方面有所不同。

这些类路径如何影响字节码?我读到,对于不同的类路径,常量池的顺序可能不同。还有其他可能的差异吗?

再次:我假设编译的所有依赖项都已满足,但可能使用不同的 jar。

最佳答案

您编译的类确实会影响您生成的字节码。据我所知受影响的地区:

  • static查找和调用静态方法的代码与常规(实例)方法的代码不同;如果您的代码与不兼容版本的库一起运行,这可能会导致您的代码在运行时失败
  • 常量:许多常量(整数、字符串等)如果声明为static,则由编译器内联。和finalstatic 之外的常量值堵塞;如果不同版本的依赖库为您的代码引用的常量定义了不同的值或类型,那么您的代码在其字节码中将具有不同的值

关于java - 类路径如何影响 *.class 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41068401/

相关文章:

java - 编写 Java 库以有条件地处理输入类而不会导致对该类的无条件运行时依赖

java - 在命令提示符和 IntelliJ IDEA 中使用自定义 jar 库

java - 将 List<Item> 转换为 json

java - 如何有效地确定java对象在内存中的大小?

java - 避免 catch 子句中实际/逻辑上无法访问的代码

java - "classpath*"在 Spring MVC 项目中声明在哪里?

java - ant 构建文件中的 Guava

java神秘的类路径行为

java - 为什么在 Weighted QuickUnion 中联合和查找操作期间的数组访问次数据说是 lg(N) 的顺序?

java - 如果图片尺寸过大,将无法加载