目录
一、Java注解(Annotation)
1.1、Annotation的作用
1.2、内置注解
1.3、抑制警告
1.4、针对类的注释
1.5、针对方法的注释
1.6、Java.lang.annotation中的接口有
1.6.1、Documented
1.6.2、Inherited
1.6.3、Retention
1.6.4、Target:指示注释类型适用的程序元素的种类
1.7、自定义注解:(MyAnnotation)
1.8、@interface声明一个注解
1.9、完整的注解有三步
1.9.1、ORM(object relationship Mapping)对象关系映射
1.9.2、自定义注解实例
一、Java注解(Annotation)
1.1、Annotation的作用
(1)非程序本身,但可以对程序作出解释
(2)可以被其他程序读取(如:编译器)
格式:以“@注释名”,在代码中存在,可以添加数值,如:@supperessWarnings(value=”unchecked”)
用在何处:packge包,class类,method方法,field属性。注解可以给他们添加额外信息。
1.2、内置注解
1.2.1、@override
定义在java.lang.override包中,声明一个方法打算重写一个父类的方法,@override可以手动检查重写的方法是否正确,
1.2.2、@Deprecated
表示过时或者不用的element(元素),因为有更好的可以代替或者是原来的element的使用存在一定的危险
1.2.3、@suppressWarning
定义在java.lang.SuppressWarning包中,用来抑制编译时的警告。
它们都在java.lang中
- Ctrl+\ 注解一行代码
- Ctrl+鼠标点击 查看注解的详情
- Shift + o 导入包
1.3、抑制警告
@SuppressWarnings(“unchecked”)
@SuppressWarnings(“value = {“unchecked”,”deprecation”}”)
参数 |
说明 |
deprecation |
使用过时的方法警告 |
unchecked |
执行了为检查的转换时警告,使用集合时未定义泛型 |
fallthrogh |
在switching语句使用时发生case穿透 |
path |
类路径,源文件路径等中不存在路径的警告 |
serial |
在可序列化的类上缺少serialversionUID定义时的警告 |
finally |
任何finally子句不能完成时的警告 |
all |
关于以上所有情况的警告 |
1.4、针对类的注释
可用反射Class.getAnnotationPresent(Class<? Extends Annotation>annotationClass)来检测在某个类上是否存在指定的注释类
1.5、针对方法的注释
可用Class.isAnnotationPresent(Class<? Extends Annotation>annotationClass)来检测某个类上是否存在指定的注释
1.6、Java.lang.annotation中的接口有
(元注解【meta-annotion】:@Document,@Inherited,@Retention,@Target)
1.6.1、Documented
某一类型的注释被Javadoc或者某种类似的工具进行文档化
1.6.2、Inherited
指示注释类型被自动继承
1.6.3、Retention
指示注释类型会保留多久,描述注解的生命周期;其默认值为
RetentionPolicy.CLASS(编译器把注释记录在类文件中,但在运行时jvm不需要保留注释,在class文件中有效即class保留)。值还可以为RetentionPoliy.SOURCE(编译器丢弃的注释)和RetentionPolicy.RUNTIME(编译器将把注释记录在类文件中,在运行jvm时将保留注释,因此可以反射性的读取)。
其中@Override和@SuppressWarnings是retentionPolicy.SOURCE级别的;@Deprecated是RetentionPolicy.RUNTIME
@Retention(RetentionPolicy.RUNTIME)
取值Retention policy |
作用 |
SOURCE |
在源文件中有效(即源文件保留) |
CLASS |
在Class文件中有效(即Class保留) |
RUNTIME |
在runtime可以被反射机制读取运行时有效(即运行时保留) |
Retention 保留 policy 级别 |
使用source级别时class runtime都有效
1.6.4、Target:指示注释类型适用的程序元素的种类
ElementType可取值ANNOTATION_TYPE(注释类型声明)
CONSTRUCTOR(构造器声明),FIELD(属性声明),type
LOCAL_VARIABLE(局部变量)
@Target({ElementType.type})
@target(value = Element type.TYPE)
定义一个数组
@Target(value = {Element Type.METHOD, Element Type.type })
1.7、自定义注解:(MyAnnotation)
使用@interface自定义注解时,自动继java.lang.annotation包中的Annotation接口
1.8、@interface声明一个注解
格式:public@interface注解名(定义体)
其中每一个方法实际上是一个声明了一个配置参数
(1)方法名即为参数名
(2)返回类型即参数类型(只能是基本类型)
(3)可以通过default来声明参数的默认值
(4)如果只有一个参数成员,一般参数名为value
1.9、完整的注解有三步
(1)定义注解本身
(2)类里使用注解
(3)通过写一个解析程序吧注解读出来
1.9.1、ORM(object relationship Mapping)对象关系映射
(1)【注意:元素必须要有值我们定义注解元素时常用到空字符串“0”表示默认值】
(2)经常用负数(如:-1)表示不存在
1.9.2、自定义注解实例
定义自己的MyAnnotation,为MyAnnotation类增加参数,并为参数添加默认值
public String color() default "green";public int[] array() default {1,2};public String value() default "java";public MetaAnnotation annotation() default @MetaAnnotation("miracle");
//有个注释类名为MetaAnnotation;其参数增加也如上所示;由@MetaAnnotation定义default值的方式可知,在@MetaAnnotation类中需要设置的属性值为Value。