摘要:在中,注解是被当做修饰符如之类来使用的。常用注解修饰重载父类方法修饰未来将被抛弃的类方法属性等等关闭不当编译器警告信息。注解来源分类来自的注解如等等三方的注解如中的等等自定义注解通过元注解自定义的注解。是一个标记注解,没有成员。
简介
注解,java中提供了一种原程序中的元素关联任何信息、任何元素的途径的途径和方法。
注解是那些插入到源代码中使用其他工具可以对其进行处理的标签。注解不会改变程序的编译方式。java编译器会对包含注解与不包含注解的代码生成相同的虚拟机指令。在java中,注解是被当做修饰符(如public/static之类)来使用的。
注解与注释注释是供人看的,注解是供程序调用的。一种是程序员写给另一个程序员的,一种是程序员写给计算机解析的。
常用注解@Override : 修饰重载父类方法;
@Deprecated : 修饰未来将被抛弃的类/方法/属性等等;
@SuppressWarnings: 关闭不当编译器警告信息。
注解运行机制分类源码注解: 注解只在源码中存在,编译成.class文件中不存在;
编译时注解: 注解存在于源码与.class中,运行时不存在;
运行时注解: 在所有阶段都存在,可以影响程序运行逻辑。
注解来源分类来自jdk的注解:如@Override /@Deprecated等等;
三方的注解: 如junit中的@Test/@Before等等;
自定义注解: 通过元注解自定义的注解。
元注解给注解进行注解,用于自定义注解。
@Target: 指明定义的注解的作用域,其值包括:
ElementType.CONSTRUCTOR: 构造方法声明;
ElementType.FIELD: 属性/字段声明;
ElementType.LOCAL_VARIABLE: 局部变量声明;
ElementType.METHOD: 方法声明;
ElementType.PACKAGE: 包声明;
ElementType.PARAMETER: 参数声明;
ElementType.TYPE: 类接口声明;
ElementType.ANNOTATION_TYPE: 注解类型声明;
ElementType.TYPE_PARAMETER: 类型参数声明(@since 1.8);
ElementType.TYPE_USE: 类型使用(@since 1.8)
@Retention: 自定义注解的生命周期,其值包括:
RetentionPolicy.SOURCE: 只在源码显示,编译时丢弃;
RetentionPolicy.CLASS: 编译时记录到.class中,运行时忽略;
RetentionPolicy.RUNTIME: 运行时存在,可通过反射来读取。
@Inherited: 一个标记注解,阐述了某个被标注的类型是被继承的,只能继承与类。
@Documented: 用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
自定义注解//@Target(ElementType.METHOD) @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Description { String desc() default ""; String author() default ""; int age() default 18; }
使用关键字@interface定义注解;
成员变量以无参无异常的方式声明;
可以通过default关键字给成员变量指定默认值;
成员变量的类型是受限制的,包括原始类型、String、Class、Annotation、Enumeration;
如果注解只有一个成员变量,则成员名称必须取名value(),在使用中可以忽略成员名称与赋值号(=);
注解可以没有成员,没有成员的注解称为标示注解。
使用注解// @<注解名称>(<成员名1>=<成员值1>,<成员名2>=<成员值2> ...) @Description(desc = "I"m class annotation") public class AnnotationApp { @Description(desc = "I"m method annotation",author = "rudy") public String eyeColor(){ return "red"; } }解析注解
通过反射获取类、方法、成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。
import Annotation.Description; import org.junit.Test; public class AnnotationTest { @Test public void testParse() throws ClassNotFoundException { // 取出注解 Class cls = Class.forName("Annotation.AnnotationApp"); boolean isExit = cls.isAnnotationPresent(Description.class); if(isExit){ // 做逻辑处理 Description annotation = (Description) cls.getAnnotation(Description.class); System.out.println("get annotation:" + annotation.desc()); }else{ System.out.println("no annotation!"); } } }
使用类加载器加载类,获取类对象;
判断是否存在类注解;
取出类注解,做逻辑处理;
方法注解类似。
他山之石深入理解Java:注解(Annotation)--注解处理器: http://blog.csdn.net/z69183787/article/details/40378309
全面解析Java注解(视频):http://www.imooc.com/learn/456
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69846.html
摘要:例子首先来看一个例子这里用了目的是告诉编译器这个方法重写了父类的方法如果编译器发现父类中没有这个方法就会报错这个注解的作用大抵是防止手滑写错方法同时增强了程序的可读性这里需要指出一点去掉并不会影响程序的执行只是起到标记的作用找到的实现关注点 1. 例子 首先来看一个例子: @Override public String toString() { return xxxxx; ...
摘要:前言注解就是提供了一种元程序中的元素关联任何信息和着任何元数据的途径和方法。注解是一个接口,程序可以通过反射来获取指定程序元素的对象,然后通过对象来获取注解里面的元数据。注解是及以后版本引入的。综上所述元数据以标签的形式存在于代码中。 前言 Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解...
摘要:注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素类方法成员变量等进行关联。为程序的元素类方法成员变量加上更直观更明了的说明,这些说明与程序的业务逻辑无关,并且提供给指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后开始引入的新特性,中文为注解。注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(...
摘要:的在日常开发,特别是开发中使用广泛,各种框架,测试框架多多少少都会引入一些注解。的功能是作用于程序元数据的特殊类型。而在编译期使用注解则需要特殊的工具,本文不讨论。可以看到通过类中的反射方法获取到了这个类的注解以及其方法的注解。 Java的Annotation在日常开发,特别是java web开发中使用广泛,各种web框架,测试框架多多少少都会引入一些注解。若对java注解有一个全面深...
摘要:另一个很重要的因素是定义了一种标准的描述元数据的方式。对于注解,它的用户就是虚拟机,工作在字节码层面,在编译阶段进行检查,其处理机制主要是内部处理。 什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码: @Override public String toString() { return This is St...
阅读 3287·2021-11-25 09:43
阅读 1253·2021-11-23 09:51
阅读 3577·2021-10-11 11:06
阅读 3636·2021-08-31 09:41
阅读 3574·2019-08-30 15:53
阅读 3442·2019-08-30 15:53
阅读 941·2019-08-30 15:43
阅读 3278·2019-08-29 14:02