Java中注释的目的是什么?我对它们的模糊理解是介于注释和实际代码之间。它们在运行时会影响程序吗?

它们的典型用途是什么?

它们是 Java 独有的吗?有 C++ 等价的吗?

有帮助吗?

解决方案

注释主要由检查其他代码的代码使用。它们通常用于修改(即在运行时装饰或包装)现有类以更改其行为。框架如 联合单元休眠 使用注释可以最大限度地减少使用框架所需编写的代码量。

甲骨文有 对这个概念及其在 Java 中的含义的很好的解释 在他们的网站上。

其他提示

另外,它们是 Java 独有的吗?C++ 是否有等效的?

没有,但是 VB 和 C# 有 属性 这是同一件事。

它们的用途非常多样化。一个典型的 Java 例子, @Override 对代码没有影响,但如果修饰方法实际上没有覆盖另一个方法,编译器可以使用它来生成警告(或错误)。同样,方法也可以被标记为过时。

然后就是反思。当您在代码中反映类的类型时,您可以访问属性并根据在那里找到的信息进行操作。我不知道 Java 中的任何示例,但在 .NET 中,编译器使用它来生成 (反)序列化 类的信息,确定 内存布局 的结构和 声明函数导入 来自遗留库(等等)。它们还控制 IDE 表单设计器的工作方式。

/编辑:类上的属性与标签接口相当(例如 可串行化 在爪哇)。然而,.NET 编码指南规定不要使用标签接口。此外,它们仅适用于类级别,而不适用于方法级别。

Anders 给出了很好的总结,下面是 JUnit 注释的示例

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

这里的 @Test 注释告诉 JUnit flatfileMissing 方法是一个应该执行的测试,并且预期结果是抛出的 IOException. 。因此,当您运行测试时,将调用此方法,并且测试将根据是否通过 IOException 被抛出。

Java 还具有注释处理工具 (apt),您不仅可以在其中创建注释,还可以决定这些注释如何在源代码上工作。

这里 是一个介绍。

要查看可以使用注释做的一些很酷的事情,请查看 我的 JavaBean 注释和注释处理器.

它们非常适合生成代码,在构建过程中添加额外的验证,而且我也一直将它们用于错误消息框架(尚未发布 - 需要与老板澄清......)。

根据字面定义,注释向元素添加注释。同样,Java 注释是我们插入源代码中的标签,用于提供有关代码的更多信息。Java 注释将信息与注释的程序元素相关联。除了 Java 注释之外,Java 程序还有大量的非正式文档,这些文档通常包含在源代码文件的注释中。但是,Java注释与注释不同,Java注释直接使用注释类型来描述注释的形式来注释程序元素。Java 注释以标准和结构化的方式呈现信息,以便处理工具可以轻松地使用它。

要详细阅读,有一个很好的教程 Java注解

什么时候使用 Java 的 @Override 注解?为什么?该链接引用了一个关于何时应该使用覆盖注释(@override)的问题。这可能有助于更好地理解注释的概念。查看。

注释在EJB方面被称为选择隐式中间软件方法,而不是明确的中间软件方法,当您使用注释时,您可以自定义API确切需要的内容:不使用注释:代码将是

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

在使用注释时,您的代码不包含使用中间件服务的繁琐的API调用。代码干净并且专注于业务逻辑

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}

注释, ,一种元数据形式,提供有关程序的数据,但该数据不属于程序本身。注解对其所注解的代码的操作没有直接影响。

注释有多种用途,其中:

  • 编译器信息 — 编译器可以使用注释来检测错误或抑制警告。
  • 编译时和部署时处理 — 软件工具可以处理注释信息以生成代码、XML 文件等。
  • 运行时处理 — 一些注释可在运行时检查。

可见范围定义为 java.lang.annotation.RetentionPolicy 常量 SOURCE, CLASS, , 和 RUNTIME

  • RetentionPolicy.SOURCE: :该注释将在程序的源代码中可用,并且可由编译器或 易于 用于代码生成。
  • RetentionPolicy.CLASS: :该注释将位于 .class 文件中,但在运行时不可用。由字节码操作工具使用,例如 先进制造商 执行修改
  • RetentionPolicy.RUNTIME: :该注释将在 .class 文件和运行时可用,以便通过 getAnnotations() 通过 java 反射进行检查。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top