1、预定义的注解
@Deprecated:此注解可以用在方法,属性,类上,表示不推荐程序员使用,但是还可以使用.
@Override:它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告。
@SuppressWarnings:注解主要用在取消一些编译器产生的警告,警告对于运行代码实际上并没有影响,但是出于部分程序员具有洁癖的嗜好,通常会采用@SuppressWarnings来消除警告。
@SafeVarargs:在声明具有模糊类型(比如:泛型)的可变参数的构造函数或方法时,Java编译器会报unchecked警告。鉴于这些情况,如果程序员断定声明的构造函数和方法的主体不会对其varargs参数执行潜在的不安全的操作,可使用@SafeVarargs进行标记,这样的话,Java编译器就不会报unchecked警告。
使用前提:
方法必须是由static或者final修饰的方法!
只能用于标记构造函数和方法
只能用在可变长参数的方法上
@FunctionalInterface:被@FunctionalInterface注解标记的类型表明这是一个函数接口。从概念上讲,函数接口只有一个抽象方法。也就是一旦不满足函数接口,就会报错,比如他有两个抽象方法。
2、元注解
@Retention:保持范围
按生命周期来划分可分为3类:
RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;一般用于运行前的检查
RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;在编译时进行一些预处理操作
RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;一直有效!在运行时去动态获取注解信息
@Documented:是用来标注某个类或者方法不建议再继续使用
@Target:作用域,指定修饰的注解的使用范围
@Target(ElementType.TYPE) —— 接口、类、枚举、注解
@Target(ElementType.FIELD) —— 字段、枚举的常量
@Target(ElementType.METHOD) —— 方法
@Target(ElementType.PARAMETER) —— 方法参数
@Target(ElementType.CONSTRUCTOR) —— 构造函数
@Target(ElementType.LOCAL_VARIABLE) —— 局部变量
@Target(ElementType.ANNOTATION_TYPE) —— 注解
@Target(ElementType.PACKAGE) —— 包
@Inherited:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解。
@Repeatable 注解是用于声明其它类型注解的元注解,来表示这个声明的注解是可重复的。@Repeatable的值是另一个注解,其可以通过这个另一个注解的值来包含这个可重复的注解。
@Native注解修饰成员变量,则表示这个变量可以被本地代码引用,常常被代码生成工具使用。对于 @Native 注解不常使用,了解即可!