当前位置: 首页 > news >正文

《Java 100 天进阶之路》第26篇:Java注解(Annotation)详解

第26篇Java注解Annotation详解系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第25篇Java类加载与初始化 |➡️ 下一篇第27篇Java代理类详解待发布一、核心知识点注解的定义元数据为程序元素类、方法、字段添加标记或配置内置注解Override、Deprecated、SuppressWarnings、FunctionalInterface元注解Target、Retention、Documented、Inherited、Repeatable自定义注解的声明与使用注解的保留策略SOURCE、CLASS、RUNTIME注解的解析通过反射读取注解信息二、通俗讲解1分钟开心学1. 什么是注解注解是 Java 5 引入的一种特殊“标记”可以附加在类、方法、字段等元素上用来提供额外的元数据。它不影响程序的直接运行但可以被编译器、工具或框架读取用来生成代码、进行校验、配置等。2. 常见内置注解Override告诉编译器该方法重写了父类方法如果父类没有该方法会编译报错。Deprecated标记某个元素已过时使用时会编译警告。SuppressWarnings抑制编译器警告。FunctionalInterface标记函数式接口Java 8只允许一个抽象方法。3. 元注解——用来定义注解的注解Target限制注解可以放在哪里类、方法、字段等。Retention注解保留到什么时候源码、字节码、运行时。Documented是否生成到 Javadoc 中。Inherited子类是否继承父类的注解。Repeatable允许同一个位置重复使用同一个注解Java 8。4. 自定义注解publicinterfaceMyAnnotation{Stringvalue()default;// 注解属性intcount()default1;}5. 注解的解析如果保留策略是RUNTIME可以通过反射获取注解信息这是 Spring、JUnit 等框架的基础。生活类比注解就像商品上的标签。Override是“保修标签”告诉检查员这是原厂零件。Deprecated是“停产清仓”标签提醒大家尽量别买。自定义注解就像你自己贴的“易碎品”标签只有你框架能看懂并处理。三、实操代码案例 场景说明场景自定义一个Test注解模拟单元测试框架在运行时自动执行标注了Test的方法。importjava.lang.annotation.*;importjava.lang.reflect.Method;// 1. 自定义注解Retention(RetentionPolicy.RUNTIME)// 保留到运行时Target(ElementType.METHOD)// 只能用在方法上interfaceTest{Stringdescription()default;}// 2. 使用注解的测试类classMyTest{Test(description测试加法)publicvoidtestAdd(){System.out.println(执行 testAdd);}TestpublicvoidtestSub(){System.out.println(执行 testSub);}publicvoidnormalMethod(){System.out.println(普通方法不执行);}}// 3. 解析注解运行测试publicclassAnnotationDemo{publicstaticvoidmain(String[]args)throwsException{MyTestobjnewMyTest();Method[]methodsobj.getClass().getDeclaredMethods();for(Methodmethod:methods){if(method.isAnnotationPresent(Test.class)){TesttestAnnomethod.getAnnotation(Test.class);System.out.println(发现测试方法method.getName());if(!testAnno.description().isEmpty()){System.out.println( 描述testAnno.description());}method.invoke(obj);// 执行方法}}}}四、避坑要点错误/误区后果正确做法注解的Retention设为SOURCE或CLASS但运行时用反射读取读不到注解需要运行时读取必须设为RUNTIMETarget不限制注解用在不合适的位置语义混乱明确指定Target注解属性名为value时使用时可以省略属性名但容易忘记代码可读性下降属性名清晰时不要都叫value重复注解未配置Repeatable和容器注解编译错误按规范定义五、面试高频考点Q1Override注解的作用是什么标记该方法重写父类方法编译器会检查父类是否有该方法如果没有则报错避免写错方法名或参数。Q2Retention的三种策略有什么区别SOURCE只在源码中保留编译后丢弃如Override。CLASS保留在字节码中但运行时不可见默认。RUNTIME保留到运行时可通过反射读取如 Spring 注解。Q3如何获取一个方法上的注解值通过反射Method method ...; MyAnnotation anno method.getAnnotation(MyAnnotation.class); String value anno.value();六、练习题设计自定义一个NotNull注解用于标记方法的参数不能为 null然后写一个处理器在运行时检查。代码分析下面注解能否正常工作为什么Retention(RetentionPolicy.CLASS)interfaceMyAnno{}动手实现一个简单的“权限注解”在方法上标注RequireRole(admin)然后在调用时检查当前用户角色。 你的学习进度当前第26篇 / 共44篇 ·第四阶段注解、反射、代理、日期第26~31篇✅ 已完成第1~25篇 正在学第26篇⏳ 待学习第27~44篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 本专栏每篇都包含避坑表 面试高频考点 练习题。每天30分钟100天拿offer下一篇文章预告《Java代理类详解》内容简介静态代理、JDK动态代理基于接口、CGLIB动态代理基于继承AOP原理入门。 学完这篇你将掌握代理模式理解Spring AOP的底层实现。《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送
http://www.zskr.cn/news/1314658.html

相关文章:

  • 2026年05月探秘成都,新生儿照安心门店大揭秘,生日照/儿童摄影/儿童照/百天上门照/全家福,新生儿照品牌有哪些 - 品牌推荐师
  • 健身房私教管理系统 01:用户体系与多角色注册闭环
  • RISCV AS汇编器
  • Cursor Pro终极破解教程:三步免费解锁AI编程助手完整指南
  • 手把手教你学Simulink——电动汽车电驱系统能量回收(再生制动)四象限运行仿真
  • 从游戏显卡到专业GIS:如何为你的SuperMap三维场景挑选并调校一张合适的显卡
  • VSCode时间追踪插件开发指南:从零构建本地化专注力工具
  • 【NotebookLM审稿回复黄金模板】:20年学术AI工具实战专家亲授3类高拒稿率意见的5步逆转法
  • 深度强化学习在卫星姿态控制中的应用与挑战
  • AWS AgentCore实战指南:从开源样本库学习AI Agent开发与云原生部署
  • 2026年实测10款免费降AI率神器:从降AI到AIGC免费降重,可至5%以下 - 降AI实验室
  • 8051单片机调试技术:MON51与89C51兼容性问题解析
  • Godot游戏开发:有限状态机(FSM)框架YAFSM原理与应用实战
  • Godot游戏开发:基于gd-YAFSM框架的有限状态机实践指南
  • 终极Windows系统优化指南:5分钟掌握Dism++免费清理工具
  • 前端工程化12:Git规范+Commitlint提交信息标准化
  • 35岁程序员的破局之路:我是如何靠技术创业成功的
  • SFT与RL:AI训练的黄金搭档,何时介入才能事半功倍?
  • 华曦达开启招股:拟募资5.7亿港元 5月27日上市 腾讯与立讯精密是股东
  • 从特征点到神经网络:HomographyNet如何革新图像配准
  • 从Prompt到生产力:收藏这5个Agent工程要素,让大模型成为你的得力助手!
  • LOCAL_SENSITIVE_PATTERNS:不经过大模型的本地正则补强:开源免费的WPS AI 软件 察元AI文档助手
  • 如何平滑迁移 Grafana 配置数据库到新版本服务器?
  • OmenSuperHub终极指南:如何彻底释放你的惠普游戏本性能潜力
  • 一篇文章带你看懂一致性hash
  • 光子量子计算编译优化技术与自适应框架设计
  • 2026年知名的模组吸干机/组合式吸干机主流厂家对比评测 - 行业平台推荐
  • Sora-FullStack全栈开发框架:构建AI视频生成应用的工程实践
  • 从码农到技术总监:10年程序员的职业进化史
  • 多智能体时代,Workflow 为什么开始失效?