没有引用的类被编译?

时间:2011-11-28 23:47:27

标签: java eclipse

在我的项目中,从未以任何方式解决的类会影响最终结果吗?他们甚至被编译了吗?

内部类,静态内部类或具有静态成员的顶级类如何?

提前致谢。 (对不起,如果我的问题有些广泛。)

4 个答案:

答案 0 :(得分:6)

在编译的源文件中定义的所有类都将被编译,无论它们是否在运行时使用都不会在编译阶段产生。

但是从未使用过的类永远不会在运行时加载。

如果您的“最终结果”是项目的运行时行为,那么编译但从未加载且从未使用过的未使用的类将不会以任何方式影响“最终结果”。

但是,请注意,如果您未使用的类具有编译错误,那么它们将阻止您的项目进行编译(因此使您无法运行它),即使这些类在运行时也不会被使用。 / p>

答案 1 :(得分:1)

是的,它们会被编译......编译器不知道你的项目外部可能在编译时调用的东西。您可以随时查看已编译的.class文件。

答案 2 :(得分:1)

这取决于您的构建系统。一般来说,它们会被编译。

需要考虑的一些要点。

  1. 即使您的项目没有引用它们,您的项目也可能使用反射 - 在这种情况下,编译器应该如何知道您不使用它们。你能自己证明吗?
  2. 如果这些课程是公开的,其他人可以独立使用您的课程。
  3. 关于内部类,静态内部类或具有静态成员的顶级类 - 它们将被编译的可能性很高。

答案 3 :(得分:0)

是的,他们会被编译。

即使你没有使用它们,其他人仍然可以使用你创建的任何公共类...如果你将jar导入你的项目,并将其用作依赖项,那么你'可能使用jar中没有被jar中任何其他类引用的类,它们仅供客户使用。

因此,Java编译器将编译您在项目中编写的每个类,您创建的项目不知道您是在编写仅供当前项目本地使用的类,还是您正在开发库。