关于类的顺序,Java编译器的首选项是什么?

关于类的顺序,Java编译器的首选项是什么?,java,Java,在将Java文件编译为JVM的类文件之前,某些Java编译器是否喜欢使用不同的Java文件布局 我的意思是,首先编写主类,然后在下面几行中编写所有其他类,是否会加快编译时间 编译器是否需要更长的时间,因为它还没有遇到它在主类中需要的相关信息 如果我没记错的话,Java也不使用显式指针,所以我不认为这是个问题 换句话说,如果您首先在main之外编写类,这会加快编译时间吗?如果存在任何这样的差异,您将不会注意到它 换言之,您应该以一种有意义且易于维护的方式组织类,而不是帮助编译器。非常简单:指定类的

在将Java文件编译为JVM的类文件之前,某些Java编译器是否喜欢使用不同的Java文件布局

我的意思是,首先编写主类,然后在下面几行中编写所有其他类,是否会加快编译时间

编译器是否需要更长的时间,因为它还没有遇到它在主类中需要的相关信息

如果我没记错的话,Java也不使用显式指针,所以我不认为这是个问题


换句话说,如果您首先在main之外编写类,这会加快编译时间吗?

如果存在任何这样的差异,您将不会注意到它


换言之,您应该以一种有意义且易于维护的方式组织类,而不是帮助编译器。

非常简单:指定类的顺序

换句话说:你给编译器一个文件或目录名的列表。然后编译器按照给定的顺序处理这些文件,然后遍历每个文件。有时,它会向前引用,以了解所使用的类型尚未定义

我猜:当您要求编译器查找完整的目录时,它只会按照文件系统使用的顺序(如字母顺序)读取文件


最后:这绝对是编译器(甚至是生成运行编译器的命令的构建工具)的实现细节。因此,不同的工具或工具版本可能会导致不同的结果。所以再次强调:不要浪费时间为此“优化”

编译时,所有源代码都已编写。所以它们的书写顺序是不相关的。你是什么意思?你指的是JRE编译成Java字节码吗?我已经知道了,我知道这就是人们在之前或之后编写它们的原因,但我对编译器方面很感兴趣,这就是为什么我问自己是如何做到的。我对Java编译器很好奇。你把“更快的编译”放在了你的问题中,所以当人们告诉你,通过组织代码来提高编译时间,你犯了一个非常错误的错误时,不要感到惊讶。现在是2018年。即使是一台普通的笔记本电脑也可以在几秒钟内轻松编译数百个类。谢谢你指出我的错误想法,但我仍然想知道这些基准。是否有办法实现基准?这将导致一种更注重硬件的方法,还是将导致对编译器机制和复杂性的关注?您不必指定要编译的所有类。根据应用程序的类型,您可能只需要指定主类,所有其他类也将被编译,这仅仅是因为这些类直接或间接地从主类引用。我指的是手动
javac
命令行编译。使用IDE或构建脚本(Maven、Ant、Gradle等)编译,您无法控制提供给编译器的文件顺序,因为在那里您只需要说“此目录下的所有内容”。转发引用和顺序规范意义重大。我从未使用过编译器。大概9年前,我在课堂上用过几次口译员。我正在学习编程的技巧,而无需将其付诸实践。到目前为止,它已经发挥了作用,我知道它将继续发挥作用。我真的很感激你的回答我从来不知道javac命令行编译。谢谢Andreas。我想编译器可能会给你更多的功能,而不是一个显示compile的按钮。一些我从未意识到的事情。虽然我知道C编程语言的开关。或者旗帜。