注解
- 概念:说明程序的,给计算机看的
- 作用分类:
- 编写文档:通过代码里标识的注解生成文档【生成doc文档】
- 代码分析:通过代码里标识的注解对代码进行分析【使用注解】
- 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】
基本内置注解
@Override
:检测被该注解标注的方法是否是继承自父类
(借口)的,如果不是,则报错@Deprecated
:表示这个方法已经过期
,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)@SuppressWarnings
:Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息
。这个注解是有参数的,对应参数及作用如下:
1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);
2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告
3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
4.path:在类路径、源文件路径等中有不存在的路径时的警告;
5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
6.finally:任何 finally 子句不能正常完成时的警告;
7.rawtypes 泛型类型未指明
8.unused 引用定义了,但是没有被使用
9.all:关于以上所有情况的警告。
使用示范:
@SuppressWarnings({ "rawtypes", "unused" }) //注意不要带分号
@FunctionalInterface
这是Java1.8 新增的注解,用于约定函数式接口。函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。
自定义注解
格式:
元注解 public @interface 注解名称{ 属性() }
本质:注解本质上
就是一个接口
,该接口默认继承Annotation接口
- public interface MyAnno extends java.lang.annotation.Annotation {}
属性:接口中可以定义的成员方法
要求:
属性的返回值类型有下列取值:(注意没有void!)
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
定义了属性,在使用时需要给属性赋值
- 如果定义属性时,可以用
default
关键字给属性默认初始化值;使用注解时,就可以不进行属性的赋值。 - 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
- 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
- 如果定义属性时,可以用
元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置
- ElementType取值:
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
- ElementType取值:
- @Retention:描述注解被保留的阶段
- @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
- @Documented:描述注解是否被抽取到api文档中
- @Inherited:描述注解是否被子类继承
- @Target:描述注解能够作用的位置