我爱java系列---【自定义注解】
一、注解概述
1.定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、
接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素
进行说明,注释。
2.作用分类:
编写文档:通过代码里标识的注解生成文档【例如,生成文档doc文档】
代码分析:通过代码里标识的注解对代码进行分析【例如,注解的反射】
编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【例如,Override】
3.常见注解
1. @author:用来标识作者名
2. @version:用于标识对象的版本号,适用范围:文件、类、方法。
3. @Override :用来修饰方法声明,告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译失败。
4.自定义注解
/* 自定义注解 1.格式 public @interface 注解名称 { 属性集 } 2.分类 (1)空注解: 没有属性集 */ public @interface MyAnno01 { }
/* 自定义注解 1.格式 public @interface 注解名称 { 属性集 } 2.分类 (2)有属性集的注解 属性的定义格式: 数据类型 属性名称(); //没有默认值 数据类型 属性名称() default 默认值; //有默认值,default后面的内容 (3)属性的类型都有哪些? 8种基本类型,String,枚举(不用),Class类型,注解类型 以及以上任意类型的一维数组 int[] */ public @interface MyAnno02 { String name(); int age() default 18; String[] hobbies();//爱好 MyAnno01 anno();//注解类型 }
/* 3.自定义注解使用的注意事项 1.空注解可以直接使用 2.一个注解只能在一个位置上使用一次,一个位置上可以使用多个不同的注解 3.如果注解有属性 ,那么必须给属性赋值才能使用 键值对的方式赋值 属性名=属性值 多个属性,隔开 如果属性是数组类型 并且只有一个属性值 那么{}可以省略 如果多个属性值 {}不能省略 4.如果属性没有默认值 必须赋值 如果有默认值 可以不赋值 5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名 尤其要注意的-------------- */ public class Demo07AnnotationNotice { @MyAnno01 //@MyAnno01 //同一个位置,只能使用一次 @MyAnno02(name = "少年攻城狮",hobbies = "学习java",anno = @MyAnno01) @MyAnno03("少年") @MyAnno04 public void method() { } }
/* 5.如果一个注解中 只有一个属性 并且这个属性叫value 那么赋值时可以省略属性名 尤其要注意的-------------- */ public @interface MyAnno03 { String value();//没有默认值 }
public @interface MyAnno04 { String value() default "少年攻城狮";//有默认值 }
自定义注解实例:
/* 定义一个注解:Book - 包含属性:String value() 书名 - 包含属性:double price() 价格,默认值为 100 - 包含属性:String[] authors() 多位作者 */ public @interface Book { String value(); double price() default 100; String[] authors(); }
自定义注解的使用示范:
/* 自定义Book注解并使用案例 定义一个注解:Book - 包含属性:String value() 书名 - 包含属性:double price() 价格,默认值为 100 - 包含属性:String[] authors() 多位作者 */ @Book(value="我爱java系列",price = 1000,authors = {"少年","少女"}) public class Demo08AnnotationBook { @Book(value = "少年启示录",authors = "伟哥") public void method() { } }
愿你走出半生,归来仍是少年!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?