摘要:使用类加载器加载类找到类上面的注解拿到注解实例找到方法上的注解找到方法上的注解总结认识注解注解的作用范围和生命周期作用范围包类字段方法方法的参数局部变量生命周期源文件编译时运行时能读懂注解能在实际项目中用注解解决问题,并能自定义注解
笔记来源:IMOOC Java注解注解的分类
按照运行机制分
源码注解:注解只在源码中存在,编译成 .class 文件就不存在了
编译时注解:注解在源码和 .class 文件中都存在
运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
按照来源分
来自JDK的注解
来自第三方的注解
我们自己定义的注解
元注解:给注解进行注解
自定义注解@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Description { // 使用 @interface 关键字定义注解 String desc(); // 成员以无参无异常方式声明 String author(); int age() default 18; // 可以用 default 为成员指定一个默认值 }自定义注解的语法要求
使用 @interface 关键字定义注解
成员以无参无异常方式声明
可以用 default 为成员指定一个默认值
成员类型是受限的,合法的类型包括原始类型及 String、Class、Annotation、Enumeration
如果注解只有一个成员,则成员名必须取名为 value(),在使用时可以忽略成员名和赋值号 =
注解类可以没有成员,没有成员的注解称为标识注解
注解的注解(元注解)
@Target:注解的作用域
包、类、字段、方法、方法的参数、局部变量
@Retention:注解的生命周期
SOURCE:只在源码显示,编译时会丢弃
CLASS:编译时会记录到 class 中,运行时忽略
RUNTIME:运行时存在,可以通过反射读取
@Inherited:标识性注解,允许子类继承(接口实现是没有任何作用的,只会继承类注解,不会继承其他如方法的注解)
@Document:生成 javadoc 时会包含注解
使用自定义注解@Description(desc = "I am eyeColor", author = "Mooc boy", age = 18) public String eyeColor() { return "red"; }
@<注解名>(<成员名1> = <成员值1>, <成员名2> = <成员值2>, ...)
解析注解概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。
@Description(desc = "I am Example", author = "Mooc boy", age = 18) public class Example { @Description(desc = "I am eyeColor", author = "Mooc boy", age = 18) public String eyeColor() { return "red"; } }
try { // 1. 使用类加载器加载类 Class c - Class.forName("Example"); // 2. 找到类上面的注解 boolean isExist = c.isAnnotationPresent(Description.class); if (isExist) { // 3. 拿到注解实例 Description d = (Description) c.getAnnotation(Description.class); System.out.println(d.desc()); } Method[] ms = c.getMethods(); // 4-1. 找到方法上的注解 for (Method m: ms) { boolean isMExist = m.isAnnotationPresent(Description.class); if (isMExist) { Description d = (Description) c.getAnnotation(Description.class); System.out.println(d.desc()); } } // 4-2. 找到方法上的注解 for (Method m: ms) { Annotation[] as = m.getAnnotations(); for (Annotation a: as) { Description d = (Description) a; System.out.println(d.desc()); } } } catch (Exception e) { e.printStackTrace(); }总结
认识注解
注解的作用范围 @Target 和生命周期 @Retention
作用范围:包、类、字段、方法、方法的参数、局部变量
生命周期:源文件、编译时、运行时
能读懂注解
能在实际项目中用注解解决问题,并能自定义注解
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69602.html
摘要:注解概念注解也被成为元数据为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。 注解 概念 注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。 注解是 Java 5 所引入的众多语言变化之一: 注解使得我们可以以编译器验证的格式存储程序的额外信息 注解可以生成描述符文件,甚至是...
摘要:注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据与程序元素类方法成员变量等进行关联。为程序的元素类方法成员变量加上更直观更明了的说明,这些说明与程序的业务逻辑无关,并且提供给指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后开始引入的新特性,中文为注解。注解提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(...
摘要:基本语法我们通过注解的定义来切入注解的语法。跟定义接口差不多,就是用到的是,然后加上了元注解。那么元注解的作用是什么呢元注解元注解说明了注解所修饰对象的类型。也就是标识该注解可以被继承。的内置注解重写了父类的方法表示已过时,不推荐使用。 在Android开发中我们经常会用到注解,例如@Override Butterknife中的BindView等。这里主要记录下注解怎么写和简单的使用。...
注解 注解(一种元数据形式)提供有关不属于程序本身的程序的数据,注解对它们注解的代码的操作没有直接影响。 注解有许多用途,其中包括: 编译器的信息 — 编译器可以使用注解来检测错误或抑制警告。 编译时和部署时处理 — 软件工具可以处理注解信息以生成代码、XML文件等。 运行时处理 — 可以在运行时检查某些注解。 本课程介绍了可以使用注解的位置,以及如何应用注解,Java平台标准版(Java S...
阅读 1231·2021-11-24 09:39
阅读 382·2019-08-30 14:12
阅读 2593·2019-08-30 13:10
阅读 2437·2019-08-30 12:44
阅读 960·2019-08-29 16:31
阅读 847·2019-08-29 13:10
阅读 2436·2019-08-27 10:57
阅读 3154·2019-08-26 13:57