Java注释

Java中注释的目的是什么? 我有这样的模糊的想法,他们之间的评论和实际的代码之间的某处。 它们在运行时会影响程序吗?

他们典型的用途是什么?

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

注释主要由检查其他代码的代码使用。 它们通常用于在运行时修改(即装饰或包装)现有的类,以改变它们的行为。 JUnit和Hibernate等框架使用注释来最大限度地减less自己编写框架所需的代码量。

Oracle在其网站上对Java的概念及其含义有很好的解释 。

另外,它们是Java的独特之处,还有C ++的等价物吗?

不,但VB和C#具有相同的属性 。

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

然后是反思。 当您在代码中反映某个类的types时,您可以访问这些属性并根据在此处find的信息采取行动。 我不知道Java中的任何示例,但在.NET中,编译器使用这些示例来生成类(de)的序列化信息,确定结构的内存布局并声明从旧库(等等)中导入函数 。 他们还控制IDE窗体devise器的工作方式。

/编辑:类的属性可以比较标签接口(如Java中的Serializable )。 但是,.NET编码准则说不使用标签接口。 而且,他们只在class级工作,而不是在方法级别上工作。

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

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

这里的@Test注解告诉JUnit flatfileMissing方法是一个应该被执行的testing,并且预期的结果是一个抛出的IOException 。 因此,当你运行你的testing时,这个方法将被调用,并且testing将通过还是失败,基于是否抛出IOException

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

这是一个介绍。

要查看一些很酷的内容,可以使用Annotations,请查看我的JavaBean注释和注释处理器 。

它们非常适合生成代码,在构build过程中添加额外的validation,而且我还将它们用于错误消息框架(尚未发布 – 需要用老板清除…)。

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

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

你什么时候使用Java的@Override注解,为什么? 链接指的是何时应该使用覆盖注释(@覆盖)的问题。这可能有助于更好地理解注释的概念。

当涉及到EJB的注释被称为select隐式中间件方法,通过显式的中间件方法,当你使用注解,你正在自定义你真正需要从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 } 

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

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