网站设计展示,优化关键词排名,简单做网站的软件,网站建设里的知识目录
1、什么是注解#xff1f;
2、什么是元注解
1、Target()
2、Retention()
3、Documented
4、Inherited
3、如何自定义注解以解使用
4、注解的原理 本篇文章主要是介绍注解的概念、原理#xff0c;以及通过代码演示4种元注解、如何自定义注解。通过反编译的形式进…
目录
1、什么是注解
2、什么是元注解
1、Target()
2、Retention()
3、Documented
4、Inherited
3、如何自定义注解以解使用
4、注解的原理 本篇文章主要是介绍注解的概念、原理以及通过代码演示4种元注解、如何自定义注解。通过反编译的形式进一步认识注解的本质。 1、什么是注解
注释是给人看的注解是给程序看的
例如我们常见的单元测试Test注解实现父类方法的Override注解 2、什么是元注解
元注解就是负责修饰其他注解的注解
java定义了四种主要是用于规范当前注解的作用范围注解生命周期等。
分为Target()、Retention()、Documented、Inherited
其中Target()、Retention()是用得比较多的。
1、Target()
需要带参数表示规范这个注解可以用在类上或者方法等其他地方上。
ElementType这个枚举类定义了很多类型根据不同类型的定义决定被修饰的注解的使用地方
//表示我们的注解可以用在哪些地方可以进源码查看
Target(value {ElementType.METHOD})
ElementType的类型如下 2、Retention()
需要带参数表示注解在什么地方还有效描述注解的生命周期。有3种情况
SOURCES只作用在源码阶段字节码文件种不存在
CLASS保留到字节码文件阶段运行阶段不存在
RUNTIME运行时有效开发常用
RUNTIMECLASSSOURCES
//表示注解在什么地方还有效一般就3种情况。RUNTIMECLASSSOURCES
Retention(value RetentionPolicy.RUNTIME) 3、Documented
表示是否将我们的注解生成在javaDoc中
Documented 4、Inherited
说明子类可以继承父类中的该注解
Inherited 3、如何自定义注解以解使用
以下是自定义一个metaAnnotation注解
自定义注解里面的属性必须要带括号
下面拆分为几种形式学习
情况一注解值属性为value且仅有一个属性时使用该注解可以省略命名
Target(value {ElementType.METHOD})//表示该注解是定义在方法上的
Retention(value RetentionPolicy.RUNTIME) //表示该注解生命周期为运行时有效
public interface metaAnnotation{//自定义注解记得加括号String value(); //为value时注解可以省略命名}
使用方法
metaAnnotation(value时可以省略命名只有这个可以不成名的规范)public static void main(String[] args) {} 情况二设置默认值的注解使用时候可以选择不命名以及不传参数。
Target(value {ElementType.METHOD})//表示该注解是定义在方法上的
Retention(value RetentionPolicy.RUNTIME) //表示该注解生命周期为运行时有效
public interface metaAnnotation{//自定义注解记得加括号int id() default 1;int index() default -1; //如果默认值为-1代表不存在}
使用方法
metaAnnotation()
public static void main(String[] args) {
} 情况三多参数定义注解属性为value的必须要命名传参
其他属性的无默认值的也必须要命名传参
设置了默认值的属性也可以选择传参
参数也可以为数组的方式
Target(value {ElementType.METHOD})//表示该注解是定义在方法上的
Retention(value RetentionPolicy.RUNTIME) //表示该注解生命周期为运行时有效
public interface metaAnnotation{//自定义注解记得加括号String value(); //为value时注解可以省略命名int id() default 1;int index() default -1; //如果默认值为-1代表不存在String name();int age();String[] nameList();
}
使用方法 metaAnnotation(value value时可以省略命名只有这个可以不成名的规范,index 1,name 名字,age 99,nameList {名字1,名字1})public static void main(String[] args) {} 4、注解的原理
注解的本质
就是一个接口java中所有的注解都继承了Annotation接口。
我们使用注解注解(...)的时候其实就是一个实现类对象实现了该注解以及Annotation接口
先把注解编译成class再反编译还是以我们自定义的注解举例子
Target(value {ElementType.METHOD})//表示该注解是定义在方法上的
Retention(value RetentionPolicy.RUNTIME) //表示该注解生命周期为运行时有效
public interface metaAnnotation{//自定义注解记得加括号String value(); //为value时注解可以省略命名int id() default 1;int index() default -1; //如果默认值为-1代表不存在String name();int age();
}
以下是反编译后注解真正的源代码 我们可以看到我们写的注解的本质是一个接口继承了Annotation的接口
我们在注解里面自定义的属性其实都是抽象方法的形式
当我们使用注解的时候实际上就相当于创建注解的实现类对象这个实现类对象会封装注解的属性信息比如value的值index的值name的值等封装进去之后我们就可以通过这个对象去调用注解提供的方法来获取对应的属性值。 以上就是我对注解的理解啦希望能帮到大家有问题的地方欢迎大家一起讨论
后续会不断更新作品欢迎大家一起讨论学习。❤❤❤