当前位置: 代码迷 >> 综合 >> Java注解(Annotation) ----学习笔记整理
  详细解决方案

Java注解(Annotation) ----学习笔记整理

热度:99   发布时间:2023-12-18 04:51:39.0

目录

 

一、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@SuppressWarningsretentionPolicy.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。