Java注解


114

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

它们的典型用法是什么?

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


9
您可以使用批注来做一些非常邪恶的事情。例如,如果您知道Spring Framework及其@Transactional批注,它将在方法调用之前启动事务,并在异常/错误上回滚并在成功事务上提交。它完全支持SOC原则(关注分离)。很干净 !Java规则!:-)

1
对我来说,这似乎是3个问题。第二个本身太广泛了。
Raedwald

所有语法注释都看起来像接口。那么,编译器或JVM如何知道其用途?假设如果我们采用@ Override->来检查方法是否正确重写@ Transactional,如上所述,它将执行与事务相关的工作。对于所有这些注释,我们在哪里可以找到定义/逻辑?
Paramesh Korrakuti 2015年

Answers:



17

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

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

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

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

/ EDIT:类上的属性与标记接口(如Java中的Serializable)相当。但是,.NET编码指南说不要使用标签接口。而且,它们仅在类级别上起作用,而不在方法级别上起作用。


13

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

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

在这里,@Test注释告诉JUnit该flatfileMissing方法是应执行的测试,并且预期结果为throw IOException。因此,在运行测试时,将调用此方法,并且根据是否IOException抛出,测试将通过还是失败。


7

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

这里是介绍。



1

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

要详细阅读,有一个关于Java注释的不错的教程



0

涉及到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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.