Java中注释的目的是什么?我对它们的理解很模糊,介于注释和实际代码之间。它们在运行时会影响程序吗?
它们的典型用法是什么?
它们是Java独有的吗?是否有等效的C ++?
Java中注释的目的是什么?我对它们的理解很模糊,介于注释和实际代码之间。它们在运行时会影响程序吗?
它们的典型用法是什么?
它们是Java独有的吗?是否有等效的C ++?
Answers:
批注主要由检查其他代码的代码使用。它们通常用于在运行时修改(即修饰或包装)现有的类以更改其行为。诸如JUnit和Hibernate之类的框架使用注释来最大程度地减少您编写自己才能使用这些框架的代码量。
Oracle 在其站点上用Java很好地解释了该概念及其含义。
另外,它们是Java所独有的,是否有C ++等效项?
不,但是VB和C#具有相同的属性。
它们的用法是多种多样的。一个典型的Java示例@Override
对代码没有影响,但是如果修饰的方法实际上没有覆盖另一个方法,则编译器可以使用它生成警告(或错误)。同样,方法可以标记为过时。
然后有反思。当您在代码中反映类的类型时,可以访问属性并根据那里的信息进行操作。我不知道Java中的任何示例,但在.NET中,编译器使用它来生成类的(反序列化)信息,确定结构的内存布局并声明从旧版库(以及其他库)中导入的函数。它们还控制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
方法是应执行的测试,并且预期结果为throw IOException
。因此,在运行测试时,将调用此方法,并且根据是否IOException
抛出,测试将通过还是失败。
要查看您可以使用Annotations做的一些有趣的事情,请查看我的JavaBean注释和注释处理器。
它们非常适合生成代码,在构建过程中添加额外的验证,而且我还一直在将它们用于错误消息框架(尚未发布-需要与老板联系……)。
什么时候使用Java的@Override注释,为什么? 链接指向有关何时应使用替代标注(@override)的问题。这可能有助于更好地理解标注的概念。
涉及到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
}