Java中注释的目的是什么?我把这些模糊的想法放在评论和实际代码之间.它们是否在运行时影响程序?
它们的典型用法是什么?
它们是Java独有的吗?是否有C++等价物?
注释主要由检查其他代码的代码使用.它们通常用于在运行时修改(即装饰或包装)现有类以改变其行为.诸如JUnit和Hibernate之类的框架使用注释来最小化您自己编写以使用框架所需的代码量.
Oracle 在其网站上对Java的概念及其含义进行了很好的解释.
此外,它们是Java独有的,是否有C++等价物?
不,但VB和C#具有相同的属性.
它们的用途非常多样化.一个典型的Java示例@Override
对代码没有影响,但如果修饰方法实际上没有覆盖另一个方法,编译器可以使用它来生成警告(或错误).同样,方法可以标记为过时.
然后有反思.当您在代码中反映类的类型时,您可以访问属性并根据其中的信息执行操作.我不知道Java中的任何示例,但在.NET中,编译器使用它来生成(de)类的序列化信息,确定结构的内存布局并声明从遗留库(以及其他)中导入函数.它们还控制IDE表单设计器的工作方式.
/ EDIT:类的属性与标记接口(如Java中的Serializable)相当.但是,.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),不仅可以创建注释,还可以决定这些注释如何对源代码起作用.
这是一个介绍.