java 1.5中@Retention背后发生了什么

java 1.5中@Retention背后发生了什么,java,annotations,Java,Annotations,我试图理解Java1.5中的保留策略。但是没有得到一个清晰的画面 作为 CLASS-注释将由 编译器,但不需要在运行时由VM保留 运行时-注释将由 编译器,并在运行时由VM保留,因此可以读取它们 深思熟虑地 SOURCE-编译器将丢弃注释 “丢弃”是什么意思 类文件是否通过使用源代码标记而不包含特定的注释元素 SOURCE注释仅存在于源文件中 当编译器“丢弃”注释时,实际上忽略了注释的存在。源注释的作用基本上与注释代码相同。注释的元素不受影响 @Retention就是您所说的元注释:它只适用

我试图理解Java1.5中的保留策略。但是没有得到一个清晰的画面

作为

  • CLASS
    -注释将由 编译器,但不需要在运行时由VM保留
  • 运行时
    -注释将由 编译器,并在运行时由VM保留,因此可以读取它们 深思熟虑地
  • SOURCE
    -编译器将丢弃注释
  • “丢弃”是什么意思
  • 类文件是否通过使用源代码标记而不包含特定的注释元素

  • SOURCE
    注释仅存在于源文件中

    当编译器“丢弃”注释时,实际上忽略了注释的存在。源注释的作用基本上与注释代码相同。

    注释的元素不受影响

    @Retention
    就是您所说的元注释:它只适用于其他注释接口。因此,它也仅影响应用它的注释

    例如,如果有一个名为
    @Foo
    的注释,它本身用
    @Retention(RetentionPolicy.SOURCE)
    注释,那么
    @Foo
    注释(在另一个元素上)将由编译器解析,但不会存储在生成的
    .class
    文件中(因此,如果您询问运行时元素是否有
    @Foo
    注释,您会得到否定的答案)


    如果您纯粹出于文档目的使用注释,或者希望通过注释处理(在编译步骤中)来处理注释,这将非常有用。

    在Java编程语言中,注释可以用作源代码中语法元数据的特殊形式。 可以对类、方法、变量、参数和包进行注释。注释可以嵌入到编译器生成的类文件中,并且可以由Java虚拟机保留,从而影响应用程序的运行时行为

    保留策略确定应在哪一点放弃批注。
    JVM将通过运行时使用带有保留策略运行时的批注。

    “抛出”。“未包含在中”。设想一些文档处理工具只查看源文件。或者某个特定的编译器可能会将它们用于编译时提示。。感谢您的回答。。就像上面的示例一样,我的@Foo注释接口及其方法声明将不会出现在编译的类文件中。因为,我创建了一个这样的注释接口,并将其标记为源。当我反编译该接口的.class文件时,我仍然会找到该接口及其方法..???。此外,当我同时使用其他两个常量时,我无法区分类文件中的任何内容…运行时和类。。