Java进阶_注解

img

[TOC]

【黑马程序员-Java语言高级部分9.3】Java 注解

注解基础概念

注释:用文字描述程序的,给程序员看的

百度上的解释:

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制,是一种代码级别的说明。Java 语言中的类、方法、变量、参数和包等都可以被标注。

和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。

当然它也支持自定义 Java 标注。

概念描述:

  • JDK1.5 之后的新特性

  • 用来说明程序的

  • 使用注解:@注解名称

作用分类

  1. 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

  2. 编写文档:通过代码里标识的注解生成文档,API文档是通过抽取代码中的文档注释生成的。

  3. 代码分析:通过代码里标识的注解对代码进行分析【使用反射】

大多数时候,我们会使用注解而不是自定义注解

注解给编译器和解析程序用

注解不是程序的一部分,可以理解为标签

预定义注解

@Override:检测被该注解标注的方法是否搜集继承自父类(接口)的,定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明

@Deprecated:将该注解标注的内容,表示已过时,定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

@SuppressWarnings:压制警告,一般传递参数all,定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用就好了

如@SuppressWarnings("all")、@SuppressWarnings("all")、@SuppressWarnings("unchecked")、@SuppressWarnings(value={"unchecked","deprecation"})

自定义注解

基本格式

注解的本质: 注解本质上就是一个接口,该接口默认继承java.lang.annotation.Annotation接口

元注解

概念:用于描述注解的注解。

元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。这些类型和它们所支持的类在java.lang.annotation包中可以找到。

@Target:描述能够作用的位置(即:被描述的注解可以用在什么地方)

其中value中ElementType取值可以有以下几种情况:

  • TYPE:可以作用在类上

  • METHOD:可以作用在方法上

  • FIELD:可以作用于成员变量上

@Retention:描述注解被保留的阶段,用于描述注解的生命周期

@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到字节码文件中,并被JVM读取到,一般自己定义的注解都加RUNTIME

@Documented:描述该注解是否会被抽取到api文档中

@Inherited:描述注解是否被子类继承

使用注解

注解在程序中经常和反射一起使用,注解大多数来说都是用来替换配置文件

img

在程序中使用注解:获取注解中定义的属性值

  1. 获取注解定义的位置的对象 (Class, Method, Field)

  2. 获取指定的注解:getAnnotation(Class)

  3. 调用注解中的抽象方法获取配置的属性值

案例分析

测试框架

需求:设计一个框架,检测一个类中的方法使用有异常,并进行统计。

编写一个类专门用于检查(注意注释):

运行TestCheck类中的主方法,就会自动检查所有注解@Check的方法是否异常:

img

img

ORM实例

image-20200309223608769

image-20200309224336761

Last updated

Was this helpful?