注解
1、概述
-
定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明、注释。
-
作用分类:
-
①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
-
② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
-
③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
-
-
注解的格式:
@注释名(参数名=参数值,...)
还可以添加一些参数:
@注释名(参数名=参数值,...)
2、内置注解
-
@Override:定义在 java.long.Override 中,此注解只适用于修饰方法,表示一个方法重写超类中的另一个方法。
-
@Deprecated:定义在 java.long.Deprecated 中,此注释可以修饰方法、属性、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
-
@SuppressWarnings:定义在 java.long.SuppressWarnings 中,用来取消显示指定的编译器警告。
-
此注解必须加参数才能使用,示例:
抑制单类型的警告:
@SuppressWarnings(“unchecked”)
抑制多类型的警告:
@SuppressWarnings(value={“unchecked”, “rawtypes”})
抑制所有类型的警告:
@SuppressWarnings(“all”)
-
抑制警告的参数
-
参数 | 用途 |
---|---|
all | to suppress all warnings(抑制所有警告) |
boxing | to suppress warnings relative to boxing/unboxing operations(要抑制与箱/非装箱操作相关的警告) |
cast | to suppress warnings relative to cast operations(为了抑制与强制转换操作相关的警告) |
dep-ann | to suppress warnings relative to deprecated annotation(要抑制相对于弃用注释的警告) |
deprecation | to suppress warnings relative to deprecation(要抑制相对于弃用的警告) |
fallthrough | to suppress warnings relative to missing breaks in switch statements(在switch语句中,抑制与缺失中断相关的警告) |
finally | to suppress warnings relative to finally block that don’t return(为了抑制警告,相对于最终阻止不返回的警告) |
hiding | to suppress warnings relative to locals that hide variable(为了抑制本地隐藏变量的警告) |
incomplete-switch | to suppress warnings relative to missing entries in a switch statement (enum case)(为了在switch语句(enum案例)中抑制相对于缺失条目的警告) |
nls | to suppress warnings relative to non-nls string literals(要抑制相对于非nls字符串字面量的警告) |
null | to suppress warnings relative to null analysis(为了抑制与null分析相关的警告) |
rawtypes | to suppress warnings relative to un-specific types when using generics on class params(在类params上使用泛型时,要抑制相对于非特异性类型的警告) |
restriction | to suppress warnings relative to usage of discouraged or forbidden references(禁止使用警告或禁止引用的警告) |
serial | to suppress warnings relative to missing serialVersionUID field for a serializable class(为了一个可串行化的类,为了抑制相对于缺失的serialVersionUID字段的警告) |
static-access | o suppress warnings relative to incorrect static access(o抑制与不正确的静态访问相关的警告) |
synthetic-access | to suppress warnings relative to unoptimized access from inner classes(相对于内部类的未优化访问,来抑制警告) |
unchecked | to suppress warnings relative to unchecked operations(相对于不受约束的操作,抑制警告) |
unqualified-field-access | to suppress warnings relative to field access unqualified(为了抑制与现场访问相关的警告) |
unused | to suppress warnings relative to unused code(抑制没有使用过代码的警告) |
-
演示:
-
未抑制警告前:
-
抑制警告后
-
3、 元注解
- 负责注解其他注解,Java定义了4个标准的meta-annotation类型,它们被用来对其他annotation类型作说明。
- 这些注解所支持的类可在 java.long.annotation 包中找到。
- @Target:用于描述注解的适用范围;
- @Retention:用于描述注解的生命周期,表示需要在什么级别保存该注解;(SOURCE < CLASS < RUNTIME)
- **@Documented:**指示该注解将通过 javadoc 和类似的默认工具进行文档化;
- @Inherited:指示该注解被自动继承。
4、自定义注解
import java.lang.annotation.*;
@MyAnnotation(name = "Test02",id=1)
public class Test02 {
public static void main(String[] args) {
test();
}
//注解参数有默认值可以不显式赋值,没有默认值必须要显式赋值
@MyAnnotation(name="test")
private static void test(){
System.out.println("MyAnnotation");
}
}
//描述注解的适用范围
@Target(value={ElementType.METHOD,ElementType.TYPE})
//描述注解的生命周期 SOURCE < CLASS < RUNTIME
@Retention(value=RetentionPolicy.RUNTIME)
@Documented //可以将此注解生成在javadoc文档中
@Inherited //此注解可被子类继承
//自定义注解格式:@interface 注解名{}
@interface MyAnnotation{
//定义注解的参数 格式:参数类型 参数名();
String name();
int id()default -1;//默认值为 -1
}
-
如果注解只有一个参数,则参数名一般定义为 value ,在使用该注解时,参数名可以省略不写,直接写值。
- 例:
@SuppressWarnings(value="all")
等价于@SuppressWarnings("all")