概述
注解
- 1. 概念
- 概念描述
- 使用分类
- 2. JDK中预定义的一些注解
- 3. 自定义注解
- 4. JDK中注解的新特性
- 可重复性
- 类型注解
- 5. 在程序中使用(解析/反射)注解
- 6. 小结
1. 概念
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
概念描述
- JDK1.5之后的新特性
- 说明程序的
- 使用注解:@注解名称
使用分类
- 编写文档:通过代码里的标识的注解生成文档【生成doc文档】
- 代码分析:通过代码里标识的注解对代码进行分析【使用反射】
- 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【@Override】
2. JDK中预定义的一些注解
- @Override:监测被该注解标注的方法是否是继承自父类(接口)的
- @Deprecated:该注解标注的内容,表示已过时
- @SuppressWarnings:压制警告,一般传递参数all @SuppressWarnings(“all”)
3. 自定义注解
-
格式:
元注解
public @interface 注解名称 -
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
public interface MyAnno extends java.lang.annotation.Annotation{} -
属性:接口中可以定义的成员方法
String value() default "hello";
-
要求:
(1) 属性的返回值类型有下列取值基本数据类型 String 枚举 注解 以上类型的数组
(2) 定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注 解时,可以不进行属性的赋值 - 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可 - 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}省略 - 如果自定义注解没有成员,表明是一个标识作用
(3) 说明
- 如果注解有成员,在使用注解时,需要指明成员的值 - 自定义注解必须配上注解的信息处理流程(使用反射)才有意义 - 自定义注解通过,都会指明两个元注解:Retention、Target
-
元注解:用于描述注解的注解
-
@Target:描述注解能够作用的位置(也就是能修饰哪些程序元素),参数是一个数组
ElementType取值: TYPE:可以作用于类上 METHOD:可以作用于方法上 FIELD:可以作用于成员变量上
-
@Retention:描述注解被保留的阶段(生命周期)
@Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到 -
@Documented:描述注解是否被抽取到API文档中(也就是在被javadoc解析时,是否保留下来)
-
@Inherited:描述注解是否被子类继承
4. JDK中注解的新特性
可重复性
- 在要重复的注解上声明@Repeatable,成员值为 要重复的注解.class
- 要重复的注解上的@Target、@Retention、@Inherited等元注解 要与@Repeatable上的相同
类型注解
- ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)
- ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中
5. 在程序中使用(解析/反射)注解
- 获取注解定义的位置的对象(Class、Method、Field)
- 获取指定的注解对象
getAnnotation(Class);其实就是在内存中生成了一个该注解接口的子类实现对象 - 调用注解中的抽象方法获取配置的属性值
6. 小结
-
以后大多数时候,我们会使用注解,而不是定义注解
-
注解给谁用?
1. 编译器 2. 给解析程序用
-
注解不是程序的一部分,可以理解为注解就是一个标签
最后
以上就是冷酷羽毛为你收集整理的注解1. 概念2. JDK中预定义的一些注解3. 自定义注解4. JDK中注解的新特性5. 在程序中使用(解析/反射)注解6. 小结的全部内容,希望文章能够帮你解决注解1. 概念2. JDK中预定义的一些注解3. 自定义注解4. JDK中注解的新特性5. 在程序中使用(解析/反射)注解6. 小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复