首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java必须编译成字节码吗?

Java必须编译成字节码吗?
EN

Stack Overflow用户
提问于 2017-11-29 10:43:21
回答 2查看 1.5K关注 0票数 5

Java语言规范是否要求将Java编译成Java字节码?

据我所知,情况并非如此:

JLS 1

编译时通常由将程序转换成与机器无关的字节码[表示形式]。 ..。 编程语言是,通常编译到JavaVirtualMachineSpecificationJavaSE9Edition中定义的字节码指令集和二进制格式。

(强调地雷)

我在规范中找不到任何其他提到“字节码”或“字节码”的地方。

这是否意味着所有字节码操作在技术上没有被JLS定义的"Java语言“所涵盖,并且在技术上依赖于实现细节?

EN

回答 2

Stack Overflow用户

发布于 2017-11-29 12:25:22

您正确地注意到,术语“normally”以及JLS中没有任何字节代码描述是为了尽可能地独立于执行环境来定义Java编程语言。尽管如此,这并不容易:

与预定义类和接口的关系 如上所述,该规范经常引用Java平台API的类。特别是,一些类与Java编程语言有着特殊的关系。示例包括ObjectClassClassLoaderStringThread等类,以及包java.lang.reflect中的类和接口。该规范限制了此类类和接口的行为,但没有为它们提供完整的规范。读者可以参考文档。 因此,本规范没有详细描述反射。许多语言结构在核心反射API (java.lang.reflect)和语言模型API ( Language,javax.lang.model)中都有类似之处,但是这里通常不讨论这些。例如,当我们列出可以创建对象的方式时,我们通常不包括核心反射API可以完成这一任务的方式。即使文本中没有提到这些附加机制,读者也应该知道这些机制。

所以Java编程语言比JLS更多,它也是Java平台API。在这里,我们有上述defineClass类的ClassLoader方法,接受类文件格式的输入。因此,即使我们使用字节码格式的类文件以外的其他部署方式,完全兼容的环境也必须在这里支持这种格式。请注意,Java 9引入了另一种接受类文件格式输入的方法,它甚至不需要反射或实现自定义类加载器。

这就排除了JavaME,它没有JLS提到的这些API工件,否则,我们已经有了一个不支持字节码操作的Java环境的例子。

但是,这仍然不能完全回答字节码操作是否是非语言的问题,比如JavaSE还是EE。即使由标准API提供对字节码格式的支持,字节码操作也取决于实现细节,要么是支持非强制性的仪表API,要么是以部署形式处理已编译的类文件,如文件层次结构、jar文件或模块文件,但它们都不一定是应用程序的部署形式(正如前面所说的)。因此,确实不可能实现一个字节码操作工具,确保它能够与每个可能的Java环境一起工作,尽管您必须竭尽全力创建一个名为完全兼容,但不使用这些工具…的环境。

票数 4
EN

Stack Overflow用户

发布于 2017-11-29 11:20:49

JSL不需要知道JVM将如何读取,它只描述了Java语言。JDK中提供的编译器(JAVAC)执行链接,但它不是语言本身的一部分。

Oracle的JDK软件包含一个编译器,从用Java编程语言编写的源代码到Java虚拟机的指令集

Java™编程语言编译器,中,我们可以找到同样的解释:

Java编程语言编译器javac读取用Java编程语言编写的源文件,并将它们编译成字节码类文件。此外,编译器还可以使用可插拔注释处理API处理源文件和类文件中的注释。编译器是一个命令行工具,但也可以使用调用。编译器接受Java规范(JLS)定义的源代码,并生成由()定义的类文件。

所以JAVAC命令主要是到规范之间的桥梁。

  • 输入: JLS中的.java描述
  • 输出:在JVMS中描述的.class。

您可以通过签入Jave虚拟机规范找到一些信息。

Java虚拟机对Java编程语言一无所知,只知道特定的二进制格式,即类文件格式。类文件包含Java虚拟机指令(或字节码)和符号表以及其他辅助信息。

(我想找到相反的说法,Java语言对Java虚拟机语言一无所知.)

在后面的规范中,我们发现了更多关于类格式的信息,以及它是如何被翻译到指令列表中的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47550837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档