在Java中,@符号代表什么意思?

88
我知道在文档注释中它的含义,但除此之外它还有什么意义呢?(通常我会用谷歌搜索,但是每个非字母符号都会出现在结果中)

https://dev59.com/JHVD5IYBdhLWcg3wTZxm - fdsa
https://dev59.com/k3jZa4cB1Zd3GeqPclE1 - edtheprogrammerguy
你可以在谷歌上搜索 java At 而不是 java @ - LF00
1
Java中的@符号是什么意思? - LF00
这意味着糟糕的语言设计。 - Yan.F
6个回答

109

@符号表示Java注解。Java注解的作用是为变量、方法、类、接口或其他语言元素添加特殊属性。(这可以在声明注解时进行配置)。当您向某个东西添加注解时,程序的其他部分可以检查某个东西是否有注解。然后它可以使用此信息来执行其所需的任何操作。

让我给你一些例子:

@Override注解

public class SuperClass {
    public void someInterestingMethod() {
        System.out.println("Superclass!");
    }
}

public class DerivedClass extends SuperClass {
    public void someInterestngMethod() {
        System.out.println("Derived class!");
    }
}

当你这样做时:

SuperClass sc = new DerivedClass();
sc.someInterestingMethod();
someInterestingMethod()调用应该是动态分派的,并打印"Derived class!",对吗?嗯,派生类的方法实际上拼写错误了,因此DerivedClass有了自己独立的方法,称为someInterestngMethod(),与超类的someInterestingMethod()完全无关。因此,someInterestingMethod()不再被覆盖,调用的是超类的实现。

@Override关键字旨在帮助解决这个问题。它向编译器表明您的意图,即您想要注释的方法成为祖先类方法的重载。如果不是(例如在这种情况下的拼写错误,或者如果SuperClass API更改并重新命名了方法),则会失败编译,以引起您对错误覆盖的注意。

@SuppressWarnings注释

这里有一个方法:

public void someMethod() {
    int i;
}

编译器会发出警告,指出i从未使用。因此,您可以在方法中添加@SuppressWarnings抑制警告:

@SuppressWarnings("unused")
public void someMethod() {
    int i;
}

请注意,@SuppressWarnings 注解有一个参数。一些注解有参数,你可以在 JavaDoc 中查找它们。但对于没有参数的注解,您不需要像方法一样添加 ()

您也可以声明自己的注解并使用反射来检查它们。编译器将检查上述 2 个注解。


@Alexander-ReinstateMonica 我不知道为什么我忘记修复这个问题这么长时间,但是有人再次对此进行了投票,让我想起我半个十年前发布了这个特定的答案...现在它已经被修复 :) - Sweeper
嘿,感谢你解决这个问题。你介意我提出修改建议吗?我有一个例子,可以更好地反映@Override的实用性。 - Alexander
哦,我的编辑立即显示出来了,无需批准 :| 高声望的诅咒哈哈。你能告诉我你的想法吗?如果你觉得合适,随意进行调整/还原。https://stackoverflow.com/posts/31822268/revisions - Alexander
很高兴能帮到你 :) 我已经删除了不再相关的评论。 - Alexander

15

“@”符号用于指定Java注解。

https://zh.wikipedia.org/wiki/Java注解

Java内置注解和用户自定义的自定义注解。

注解可被用于多种用途,例如抑制警告、将方法与URI(Servlet)关联、将变量与资源(JNDI)关联等。


7

“@”符号用于注解(annotations)。根据我的经验,最常见的注解是@Override,它表示一个方法在超类中已声明。其他常见的注解包括@Deprecated,表示该方法不应再使用,但仍存在于向后兼容性中,以及@SupressWarnings,可防止编译器显示警告。

请注意,实际上可以获取不包含在核心Java库中的注解并声明自己的注解。


4

@符号表示注解。它们提供关于类、字段或方法的信息(出现在它们上方)。它们不能执行操作。编译器或特殊的注解处理器使用这些信息使代码编写更少冗长。

在Java Persistence API中,您可以使用它们将Java类映射到数据库表中。

例如 @Table() 用于将特定的Java类映射到数据库表格。

@Entity 表示该类是实体类。

同样,您可以使用许多注解来映射单个列、生成id、生成版本、建立关系等。


1
作为其他人建议的一样,这是Java的注释。它可以帮助编译器验证您的代码,并通知程序员。
非常简单的代码示例:
public class SomeClass {

    @Override
    public String toString() {
        return "SomeClass";
    }

    @Deprecated
    public void doSomeOperation() {
        // some operation...
    }
}
< p > SomeClass#toString 中的注解 @Override 帮助编译器确定它是从隐式继承到类 Object 的重写函数。

而来自 SomeClass#doSomeOperation 的注解将警告程序员该函数本身已被弃用,应避免使用。


-4

这些注释是给读者或编译器看的,而不是可执行代码。


这不是正确的;注解可以在编译后的字节码中保留,并且可以在运行时读取和使用。一些框架,如Spring Framework和Java EE经常使用它。 - Jesper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接