问题

Java中注释的目的是什么?我把这些模糊的想法放在注释和实际代码之间。它们是否在运行时影响程序?

它们的典型用法是什么?

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


#1 热门回答(77 赞)

注释主要由检查其他代码的代码使用。它们通常用于在运行时修改(即装饰或包装)现有类以改变它们的行为。诸如JUnitHibernate之类的框架使用注释来最小化你自己编写以使用框架所需的代码量。

Oracle在他们的网站上有a good explanation of the concept and its meaning in Java


#2 热门回答(16 赞)

此外,它们是Java独有的,是否有C等价物?

不,但VB和C#haveattributes是一回事。

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

然后有反思。当你在代码中反映类的类型时,你可以访问属性并根据其中的信息执行操作。我不知道Java中的任何示例,但在.NET中,编译器使用它来为类生成(de)serialization信息,从遗留库(以及其他)中确定结构的memory layoutdeclare function imports。它们还控制IDE表单设计器的工作方式。

/ EDIT:类的属性与标记接口(如Java中的Serializable)相当。但是,.NET编码指南说不使用标记接口。此外,它们仅适用于类级别,而不适用于方法级别。


#3 热门回答(13 赞)

Anders给出了一个很好的总结,这是一个JUnit注释的例子

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

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


原文链接