问题
Java中注释的目的是什么?我把这些模糊的想法放在注释和实际代码之间。它们是否在运行时影响程序?
它们的典型用法是什么?
它们是Java独有的吗?有C等价吗?
#1 热门回答(77 赞)
注释主要由检查其他代码的代码使用。它们通常用于在运行时修改(即装饰或包装)现有类以改变它们的行为。诸如JUnit和Hibernate之类的框架使用注释来最小化你自己编写以使用框架所需的代码量。
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 layout和declare 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
而通过或失败。