摘要:注解对于代码的运行效果没有直接影响。主要作用提供信息给编译器编译器可以利用注解来探测错误和警告信息编译阶段时的处理软件工具可以用来利用注解信息来生成代码文档或者做其它相应处理。注解超类的子类那么,也拥有注解。
简介
注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释代码本身的一部分。注解对于代码的运行效果没有直接影响。
主要作用定义提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。
运行时的处理: 某些注解可以在程序运行的时候接受代码的提取
注解和类、接口等是一个层次的东西,它的声明是用@interface标识的,跟接口很像,如下所示:
public @interface Zeling { }元注解-注解的注解 @Documented
使用这个注解,可以让注解中的元素包含到javadoc或者类似的工具上去。
// Indicates that annotations with a type are to be documented by javadoc and similar tools by default.@Target
限定运用场景,可以同时限定多个,比如说新定义一个注解,限定在类型和方法注解。
// Indicates the contexts in which an annotation type is applicable.
主要有以下几种:
// 限定给类型注解,比如说类、接口、枚举等 TYPE, // 限定给属性注解 FIELD, // 限定给方法注解 METHOD, // 限定给参数注解 PARAMETER, // 限定给构造函数注解 CONSTRUCTOR, // 限定给局部变量注解 LOCAL_VARIABLE, // 限定在注解上注解 ANNOTATION_TYPE, // 限定在包上使用注解 PACKAGE@Retention
保留期,即注解可以在什么时间段上起作用。
@InheritedSOURCE 源代码阶段起作用
CLASS 到编译阶段还能起作用
RUNTIME 到运行期还能起作用
继承注解:当一个超类使用了这个注解,然后他的子类如果没有使用注解的话,那么子类可以继承超类的注解。
// 注解A public @interface A {} // 超类B @A public class B {} // B的子类C public class C extends B {}
那么,C也拥有注解A。
@Repeatable可重复的,当一个注解A使用了这个可重复的注解,那么注解A可以多次注解在同一个地方。
public @interface Colors { Color[] value(); } @Repeatable(Colors.class) public @interface Color { String color() default "black"; } @Color("purple") @Color("brown") @Color("red") public class Pen {}
上面这个代码块就是这个注解的习惯用法,自己理解哈。
注解的属性注解只有属性,没有方法。注解的属性定义跟无形参的方法很像。
public @interface A { // String 是属性的返回值,msg是属性的名称,可以用default后面跟着默认的值 String msg() default "msg"; }
使用方式
@A(msg = "zeling") public class B {}
如果注解属性中,只有一个属性,并且属性的名称为value那么可以直接在注解后面直接填值,不用写出属性名,如:
@C(value = "msg") //等价于 @C("msg")注解的运用
Class中有三个为注解提供的方法:
// 判断是否使用了注解 public boolean isAnnotationPresent(Class extends Annotation> annotationClass) {} // 获取某个注解 public A getAnnotation(Class annotationClass) {} // 获取所有注解 public Annotation[] getAnnotations() {}
例子:
@Zeling(msg = "zeling") public class App { /** * @description TODO * @date 2018年1月31日 下午11:06:13 * @param args */ public static void main(String[] args) throws Exception { boolean flag = App.class.isAnnotationPresent(Zeling.class); if (flag) { Zeling zeling = App.class.getAnnotation(Zeling.class); System.out.println("annotation: " + zeling.msg()); } } }
结果:
annotation: zeling
PS:记得给注解Zeling的作用时段设置为RetentionPolicy.RUNTIME哦,不然你可看不到输出的。还有就是,注解的提取是基于反射机制的,而反射是比较耗时的,所以使用注解的时候请考虑时间成本。
结语错误之处还请帮忙指正~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70929.html
注解 注解(一种元数据形式)提供有关不属于程序本身的程序的数据,注解对它们注解的代码的操作没有直接影响。 注解有许多用途,其中包括: 编译器的信息 — 编译器可以使用注解来检测错误或抑制警告。 编译时和部署时处理 — 软件工具可以处理注解信息以生成代码、XML文件等。 运行时处理 — 可以在运行时检查某些注解。 本课程介绍了可以使用注解的位置,以及如何应用注解,Java平台标准版(Java S...
摘要:那到底是怎么定义的呢它还能用在什么地方是如何在编译的时候遇到这个注解就马上发出一个提示的呢带着这些疑问,一步一步学习的注解。 最近在学习Spring Boot,发现真的是一个靠注解搭起来的框架,Spring从使用XML到现在使用注解,大概是终于发现绝大多数人所写的项目,都不需要XML的松耦合,快速上线、快速丢弃、快速接手,在一切都要求快的互联网公司里,XML这样的松耦合浪费太多的学习成...
摘要:注解有以下几个知识点元数据注解的分类内置注解自定义注解注解处理器本文先介绍前面个知识点元数据注解的分类内置注解自定义注解。注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。 大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解。showImg(https://segme...
摘要:引言在用的时候发现能自动生成,同时带有一些注解,这引起了我的好奇。注解来源于之类的其他语言。关闭不当的编译器警告。允许子类继承父类中的注解。五通过注解反射生成语句接下来,我用一个例子来解释注解的作用。 引言 在用hibernate的时候发现idea能自动生成JavaBean,同时带有一些注解,这引起了我的好奇。当在学习Android的时候,我发现XUtils这个工具包中的DBUtils...
摘要:注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素类方法成员变量等进行关联。为程序的元素类方法成员变量加上更直观更明了的说明,这些说明与程序的业务逻辑无关,并且提供给指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后开始引入的新特性,中文为注解。注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(...
摘要:注解概念注解也被成为元数据为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。 注解 概念 注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。 注解是 Java 5 所引入的众多语言变化之一: 注解使得我们可以以编译器验证的格式存储程序的额外信息 注解可以生成描述符文件,甚至是...
阅读 1605·2021-10-27 14:13
阅读 1835·2021-10-11 10:59
阅读 3328·2021-09-24 10:26
阅读 1898·2019-08-30 12:48
阅读 3007·2019-08-30 12:46
阅读 2001·2019-08-30 11:16
阅读 1378·2019-08-30 10:48
阅读 2710·2019-08-29 16:54