Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

java学习笔记,注解及其应用

Java注解

注解定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Name {
int length() default 5;
String name() default "";
int value() default 5;
}
/**
* 使用时可以是
* @Name(length = 12)
* @Name(5)
* @Name(value = 5, length = 12)
*/

注解中的元素

注解中的元素只支持:

  1. 基础数据类型
  2. String
  3. Class
  4. enum
  5. Annotation
  6. 上述类型的数组

编译器对默认值的限制

  1. 元素不能有不确定的值,即要么具有默认值,要么在使用时提供元素的值
  2. 对于非基本类型的元素,无论正在源码中还是在注解接口中定义默认值,都不能为null

注解不支持继承

注解不能继承,但注解在编译后,编译器会自动继承java.lang.annotation.Annotation接口,使用反编译可以看到

快捷方式

注释中定义了以value为名的元素,并且在使用该注解时,如果该元素是唯一需要赋值的元素,那么无需使用value = key的语法,只需在括号中给出value元素值即可,这可以应用于任何合法类型的元素,但限制了元素名必须为value

Deprecated

使用@Deprecated注解的方法代表已过时,不推荐使用的方法,再idea的提示种会以删除线的形式展现,但是仍能正常使用

Override

使用@Override注解的方法代表是重写了父类的某个方法,当我们方法的名字出错时,编译器就会报错

Test

使用@Tes注解饰的方法,可以进行单元测试

SuppressWarnings

使用@SuppressWarnings注解的方法,再idea中将不再给出该方法内的警告,不推荐使用

@SuppressWarnings中的方法有:

all,抑制所有警告

boxing,抑制与封装/拆装作业相关的警告

ccast,抑制与强制类型转换相关的警告

元注解

用来注解定义注解时的注解

Documented

使用@Documented注解的注解在生成API文档时将不会被忽略

Retention

注解可见度,定义了注解的生命周期

@Retention包含一个RetentionPolicy类型的属性value,Enum RetentionPolicy是一个枚举类型,

分为三个等级:

  1. RetentionPolicy.Source 源码级别,注解只被保留在源码,编译成class后,注解被遗弃
  2. RetentionPolicy.CLASS 类文件级别, 注解被保留到class文件,但jvm加载class文件后将被遗弃,这是默认的生命周期
  3. RetentionPolicy.RUNTIME 运行时,注解不仅被保留到class文件中,jvm加载后仍然存在

Target

@Target用来约束注解可以应用的地方(如方法、类或字段),其中ElementType是枚举类型,表示可能的取值范围,取值如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public enum ElementType{
//可用于类、接口(包含注解类型)、或enum
TYPE,
//可用于字段(域)声明,包括enum实列
FIELD,
//可用于方法声明
METHOD,
//可用于参数声明
PARAMETER,
//可用于构造函数声明
CONSTRUCTOR,
//可用于局部变量声明
LOCAL_VARIABLE,
//可用于注解声明(应用于另一注解上)
ANNOTATION_TYPE,
//可用于包声明
PACKAGE,
//可用于类型参数声明 (1.8新增)
TYPE_PARAMATER,
//类型使用声明(1.8新增)
TYPE_USE;
}

评论