Javase——注解

注解:是一种特殊的注释,可以被编译器javac VM识别的注释

 

常见的三种注解类型

@Override 检查重写父类方法

@Deprecated 标识方法果实

@SupressWarnings({"警告类型1"}) 取消编译器经过

 

元注解 :约束注解的功能

共有四个:

@Retention() 指定注解使用生命周期

@Target() 指定注解使用的范围

@Documentted() 指定被修饰的注解将被javadoc工具提取成文档

@Inherited() 用于指定被@Inherited修饰的注解具有继承性

 

 

//指定注解使用的范围

@Target({ElementType.TYPE,ElementType.FIELD})

注意:当注解未指定Target值时,默认支持全部ElementType类型

 

ElementType 枚举类型

 

TYPE // 适用于class interface enum

FIELD // 适用 属性

METHOD // 适用 方法

PARAMETER//使用方法

CONSTRUCTOR//适用构造器

LOCAL_VARIABLE//适用于局部变量

ANNOTATION_TYPE//使用注解型态

PACKAGE//适用于包

 

//关于ElementType的源码

public enum ElementType {

/** Class, interface (including annotation type), or enum declaration */

TYPE,//修饰类

 

/** Field declaration (includes enum constants) */

FIELD,//修饰属性

 

/** Method declaration */

METHOD,//修饰方法

 

/** Formal parameter declaration */

PARAMETER,//修饰形参

 

/** Constructor declaration */

CONSTRUCTOR,//修饰构造器

 

/** Local variable declaration */

LOCAL_VARIABLE,//修饰局部变量

 

/** Annotation type declaration */

ANNOTATION_TYPE,//

 

/** Package declaration */

PACKAGE,//修饰包

 

/**

* Type parameter declaration

*

* @since 1.8

*/

TYPE_PARAMETER,//成员变量

 

/**

* Use of a type

*

* @since 1.8

*/

TYPE_USE

}

 

//指定注解使用的声明周期

@Retention(RetentionPolicy.RUNTIME)

默认是RetentionPolicy.CLASS

RetentionPolicy 枚举类型

//RetentionPolicy源码如下

public enum RetentionPolicy {

/**

* Annotations are to be discarded by the compiler.

*/

SOURCE,//不能加载到编译器中

 

/**

* Annotations are to be recorded in the class file by the compiler

* but need not be retained by the VM at run time. This is the default

* behavior.

*/

CLASS,//可以被加载到字节码文件中

 

/**

* Annotations are to be recorded in the class file by the compiler and

* retained by the VM at run time, so they may be read reflectively.

*

* @see java.lang.reflect.AnnotatedElement

*/

RUNTIME//可以加载到字节码文件中,也能被VM读取,也就是运行时,可以访问注解信息

}

 

 

自定义注解

 

自定义注解及使用如下:

@Target({ElementType.TYPE,ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation{

int num() default 10;

String value() default "aa";

}

 

@MyAnnotation

class Student{

@MyAnnotation

private int id;

}

public class AnnotationTest {

}

 

 

上一篇:SpringBoot集成JWT实现token验证


下一篇:Android APT