java注解

java一共定义了7个注解。3个在java.Lang下,4个在java.lang.annotation中。

作用在代码上的注解:

@Override:方法重写,如果发现其父类或者引用的接口没有该方法时,会变异报错

@Deprecated:标记方法过时,可以使用但是会出现横线

@suppressWarnings:指示编译器去忽略直接中声明的警告。

作用在注解上的注解(元注解):

@Retention:标识这个注解怎么保存,是旨在代码中还是编入class文件,或者运行时可以通过反射访问

@Document:标记这些注解是否包含在用户文档中

@Target:标记这个注解是那种java成员

@inherited:标记这个注解是继承自那个注解类,(默认是这个注解并没有继承任何子类)

从java7开始,额外增加了3个注解:

@safeVarargs:java7开始支持,忽略任何使用参数为泛型变量的方法或者构造函数产生的警告

@Functionalinterface:java8 开始支持,标识一个匿名函数或者函数式接口

@Repeatable:java8开始支持,标识某注解可以在同一个声明上使用多次

Annotation有三个非常重要的主干类:Annotation,ElementType,RetentionPolicy

Annotation:

package java.lang.annotation; public interface Annotation { boolean equals(Object obj); int hashCode(); String toString(); Class annotationType(); }

ElementType:

package java.lang.annotation; public enum ElementType { TYPE, /* 类、接口(包括注释类型)或枚举声明 */ FIELD, /* 字段声明(包括枚举常量) */ METHOD, /* 方法声明 */ PARAMETER, /* 参数声明 */ CONSTRUCTOR, /* 构造方法声明 */ LOCAL_VARIABLE, /* 局部变量声明 */ ANNOTATION_TYPE, /* 注释类型声明 */ PACKAGE /* 包声明 */ }

RetentionPolicy:

package java.lang.annotation; public enum RetentionPolicy {     SOURCE,            /* Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了  */     CLASS,             /* 编译器将Annotation存储于类对应的.class文件中。默认行为  */     RUNTIME            /* 编译器将Annotation存储于class文件中,并且可由JVM读入 */ }

一个自定义注解的组成:

1.@interface:标识为一个注解,并且该注解不能继承其他的注解或者接口

2.@document:表示可以在javadoc中出现

3.@Target(Element.Type):可有可无,若有则只能用于声明他的地方,没有就是用于任何地方

4.@Retention(RetentionPolicy.RUNTIME):将该Annotation保存在.class文件中,并且能被虚拟机读取

注解是和反射搭配着一起实现的

你可能感兴趣的:(java,jvm,开发语言)