我知道 Java-the-compilable-programming-language 与 Java-the-bytecode-format-for-JVM-execution 不同。有一些在 .class 格式中有效但在 .java 源代码中无效的示例,例如无构造函数的类和合成方法。
如果我们手工制作一个带有 Java 语言保留关键字(例如
int
、while
)的 .class 文件作为类、方法或字段名,Java 虚拟机会接受它进行加载吗?如果加载了类,是否意味着访问该类或成员的唯一方法是通过 Java 反射,因为在 Java 编程语言中该名称在语法上是非法的?
最佳答案
是的,您可以使用保留字。这些词仅适用于编译器。它们不会出现在生成的字节码中。
使用 Java 保留字的一个例子是在基于 JVM 的 Scala 语言中。 Scala 的结构和语法与 Java 不同,但编译为 Java 字节码,以便在 JVM 上运行。
这是合法的 Scala:
class `class`
这定义了一个名为 class
的类,它带有一个无参数的构造函数。在编译的 class.class
文件上运行 javap
(反汇编程序)显示
public class class {
public class();
}
Scala 可以对任何其他 Java 保留字执行相同的操作。
class int
class `while`
class goto
它们也可用于方法或字段名称。
正如您所怀疑的,除了反射之外,您无法在 Java 中使用这些类。您可以从类似的“自定义”类文件中使用这些,例如来自 Scala 编译器生成的类文件。
总而言之,这是 javac(编译器)的限制,而不是 java(VM/运行时环境)的限制。
关于java - Java 类文件可以使用保留关键字作为名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30491035/