编译器如何处理注释?

2022-09-04 20:01:50

我有一些关于在java中处理注释的问题。

如果注释无法转换为字节码,那么这些信息去哪儿了?元数据去哪儿了?Java Reflection 如何使用这些信息?

编译器如何处理注释?

当我们说,

@Override
public void doSomething(){
}

Java编译器用它做什么?

我知道它会检查方法签名,以便该方法应该是一个完全覆盖的方法,但是如何呢?


答案 1

有三种类型的批注,请参见 http://download.oracle.com/javase/6/docs/api/java/lang/annotation/RetentionPolicy.html

@Override是一种特殊情况,因为编译器会执行其他检查。


答案 2

@Override一个源类型注释 - 用于检查特定方法是否遵循被覆盖方法的协定 - 因此它在运行时不可用(因此在逻辑上不存在于编译的字节码中)。

我知道它会检查方法签名,以便该方法应该是一个完全覆盖的方法,但是如何

在读取源文件并将其转换为字节码的过程中,例如,根本不使用反射。有关其他编译器信息,请参阅 Java 编程语言编译器 - javac


推荐