在Java中,有一些内置的(或称为“基础”)注解(annotation),这些注解在Java标准库中定义,并且具有特定的用途。以下是一些主要的Java内置注解:
- @Override:
- 用于表示一个方法是重写了父类的方法。
- 如果在子类中声明的方法并没有重写父类中的任何方法,编译器会报错。
- 这是一个标记注解,没有关联任何元素。
- @Deprecated:
- 用于表示某个类或方法已经过时,建议开发者避免使用它。
- 编译器在编译时会给出警告,告知该元素已过时。
- 这是一个标记注解,也可以与since元素一起使用,以指定替代项或替代方法的版本。
- @SuppressWarnings:
- 用于告诉编译器忽略指定的警告。
- 它可以用于类、方法或字段。
- 通常与特定的警告键(如"unchecked"、"deprecation"等)一起使用。
- @SafeVarargs:
- 用于泛型方法或构造函数,以告诉编译器不要对使用泛型参数变量的方法或构造函数发出"unchecked"警告。
- 这是一个标记注解,通常与泛型方法一起使用。
- @FunctionalInterface:
- 用于声明接口是函数式接口,即接口中只能有一个抽象方法(除了默认方法和静态方法之外)。
- 如果接口不符合函数式接口的要求(即存在多个抽象方法),编译器会报错。
- 这是一个标记注解,没有关联任何元素。
- @Retention:
- 用于指定注解的保留策略。
- 这是一个元注解(用于注解其他注解的注解),有三个可能的值:SOURCE(只在源码中存在,编译时被丢弃)、CLASS(在字节码文件中存在,但JVM运行时丢弃)、RUNTIME(在JVM运行时保留,可以通过反射读取)。
- @Target:
- 用于指定注解可以用于哪些Java元素。
- 这也是一个元注解,可能的值包括ElementType枚举中的常量,如TYPE(类、接口、注解类型或枚举声明)、METHOD(方法声明)、FIELD(字段声明)等。
- @Documented:
- 用于表示该注解应该被javadoc和类似的工具记录。
- 默认情况下,javadoc不包含注解。但是,如果注解被标记为@Documented,那么javadoc就会包含它。
这是一个标记注解。
- @Inherited:
- 表示一个注解类型被自动继承。
- 如果一个使用了@Inherited注解的类型被用于一个类,则这个注解也被用于该类的所有子类。
- 这是一个标记注解。
- @Native:
- 这是Java NIO包中的一个注解,用于标记本地方法。在Java 9及以后的版本中,它已经被标记为过时(deprecated),并被 @Native(在java.lang.annotation包中)取代,但用途和效果有所不同。在Java NIO中,@Native通常与ByteBuffer等类一起使用,表示该方法是一个本地方法,直接调用操作系统的API。
注意:Java中的内置注解主要用于元数据编程、文档生成、编译时检查等目的。开发者还可以创建自定义注解,以满足特定的需求。