【Java注解】注解基础
笔记来源: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
- 作用范围:包、类、字段、方法、方法的参数、局部变量
- 生命周期:源文件、编译时、运行时
- 能读懂注解
- 能在实际项目中用注解解决问题,并能自定义注解
【Java注解】注解基础相关推荐
- java 继承 注解_在java中实现组合注解原理分析(注解继承)
今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...
- 深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- springmvc教程--注解开发基础详解
springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) 一. 注解开发-基础 1.1 需求 使用springmvc+mybatis架构实现商品信息维护. ...
- 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器
深入理解Java:注解(Annotation)基本概念 什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadat ...
- 深入理解Java:注解
注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...
- 深入理解Java:注解(Annotation)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 1.什么是注解(Annotation) Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息 ...
- 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明
原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...
- java静态注解处理器_深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- java method 注解_JAVA 注解详解及简单实例
JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档 这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...
- 【Java】注解入门
本文作为注解的入门文章,主要向读者介绍注解的基本概念与用法,目的还是能够看懂JDK源代码的注解相关代码. 主要内容有:初步了解一下注解的定义:JDK提供的注解:自己写一个注解:用于自己写注解时用的注解 ...
最新文章
- java中文乱码的解决
- 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
- POPUP_TO_DECIDE
- Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired
- 主板没有rgb接口怎么接灯_纯白信仰打造RGB主机,四件套提升100%性能-Thermaltake...
- Linux运维基础命令笔试题
- 台积电:如果不能向华为销售芯片,其他订单可快速取代华为空缺
- iOS:quartz2D绘图小项目(涂鸦画板)
- C++ 数据结构,vector与栈介绍
- 南信大校园网稳定|多拨|软路由|硬路由|保姆级教学|一步到位|openwrt|pandavan老毛子
- 动态规划,计算股票最大收益
- 《商君列传第八》–读书总结
- 国家计算机二级和省计算机二级的区别?
- R语言波士顿房价分析
- Application Server was not connected before run configuration stop, reason: javax.management.Instanc
- RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详
- Java设计模式----创建者模式
- 亚马逊(Amazon)新接口SP-API和PII受限信息的开发者申请
- 串联谐振耐压试验装置技术参数和特点,如何选择
- Ubuntu 安装shutter
热门文章
- 大厂不一定要进,算法必须要学!精选算法文章 89 篇
- BEM 实战之微信个人页面
- 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...
- 基于Composer Player 模型加载和相关属性设置
- 那些好用的小工具——Total Commander
- 手机影音第六天 自定义播放器页面的实现(按钮暂时未监听)
- SDN/NFV步入规模部署期 运营商拓智能化成大势所趋
- AC日记——热浪 codevs 1557 (最短路模板题)
- mysql性能优化学习笔记-存储引擎
- [GDUT 决赛]--GCD,LCM——我是好人(数论)