我有一些要编译的源代码文件。为此,我必须指定一个类路径,其中包含(通过指定 jar 的方式)所有使用的具有正确签名的类和方法。
假设我有两个不同的类路径,它们都会导致编译没有错误。这些类路径可能在 jar 的顺序、jar 的版本(例如旧版本的 commons 集合被新版本替换)或不必要的 jar 的存在方面有所不同。
这些类路径如何影响字节码?我读到,对于不同的类路径,常量池的顺序可能不同。还有其他可能的差异吗?
再次:我假设编译的所有依赖项都已满足,但可能使用不同的 jar。
最佳答案
您编译的类确实会影响您生成的字节码。据我所知受影响的地区:
-
static
查找和调用静态方法的代码与常规(实例)方法的代码不同;如果您的代码与不兼容版本的库一起运行,这可能会导致您的代码在运行时失败 - 常量:许多常量(整数、字符串等)如果声明为
static
,则由编译器内联。和final
为static
之外的常量值堵塞;如果不同版本的依赖库为您的代码引用的常量定义了不同的值或类型,那么您的代码在其字节码中将具有不同的值
关于java - 类路径如何影响 *.class 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41068401/