1.概述
注解可以定义到方法上,类上,一个注解相当与一个类,就相当于实例了一个对象,加上了注解,就相当于加了一个标志。
常用的注解:
@Override:表示重新父类的方法,
这个也可以判断是否覆盖的父类方法,在方法前面加上此语句,如果提示的错误,那么你不是覆盖的父类的方法,要是提示的没有错误,那么就是覆盖的父类的方法。
@SuppressWarnings("deprecation"):取消编译器的警告(例如你使用的方法过时了)
@Deprecated:在方法的最上边也上此语句,表示此方法过时,了,或者使用在类上面
import java.util.ArrayList; import java.util.List; public class annotationDemo { /* * 对于集合,如果没有指定存储的类型,那么就会有安全警告, * 如果不想提示安全警告的话,那么就所在类或者方法上添加@SuppressWarnings(参数) */ @SuppressWarnings("unchecked") public static void main(String[] args) { List list=new ArrayList(); } }
2.自定义注解
1.格式
权限 @interface 注解名称 { }
步骤:
定义注解类--->定义应用注解类的类--->对应用注解类的类进行反射的类(这个类可以另外定义,也可以是在应用注解类中进行测试)
import java.lang.annotation.Retention; importjava.lang.annotation.RetentionPolicy; //定义此注解保留在字节码中 @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { } @MyAnnotation // 应用定义的注解类 public class ApplyMyAnnotation { public static void main(String[] args) { if (ApplyMyAnnotation.class.isAnnotationPresent(MyAnnotation.class)) {// 判断此类上是否存在指定的注解类 MyAnnotation annotation= (MyAnnotation) ApplyMyAnnotation.class .getAnnotation(MyAnnotation.class); System.out.println(annotation); } } }
2.声明周期
格式:例如:@Retention(RetentionPolicy.CLASS)
在自定一的注解类上定义周期,@Retention(参数类型) 参数类型是RetentionPolicy
RetentionPolicy.CLASS:类文件上,运行时虚拟机不保留注解
RetentionPolicy.RUNTIME:类文件上,运行时虚拟就保留注解
RetentionPolicy.SOURCE:源文件上,丢弃注解
SuppressWarnings和Override是RetentionPolicy.SOURCE,
Deprecated是在RetentionPolicy.RUNTIME,要向运行时调用定义的一样,那么必须是RetentionPolicy.RUNTIME,
默认的都是RetentionPolicy.CLASS:
3.指定目标
格式:例如:方法上@Target(ElementType.METHOD)
定义的注解可以注解什么成员。如果不声明此注解,那么就是可以放到任何程序的元素上。
可以是包,接口,参数,方法,局部变量,字段…等。
//定义此注解保留在字节码中 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE})//可以定义在方法上和类上接口,表示类型 public @interface MyAnnotation { } @MyAnnotation // 应用定义的注解类 public class ApplyMyAnnotation { @MyAnnotation//定义在方法上 public static void main(String[] args) { if (ApplyMyAnnotation.class.isAnnotationPresent(MyAnnotation.class)) {// 判断此类上是否存在指定的注解类 MyAnnotation annotation = (MyAnnotation) ApplyMyAnnotation.class .getAnnotation(MyAnnotation.class); System.out.println(annotation); } } }
3.为注解添加属性
1.类型
注解的属性置可以是:8个基本数据类型,String,枚举,注解,Class,数组类型,
2.注意点
当注 解中只有一个属性或者是只有一个属性需要赋值的话,那么在调用的时候,就可以直接写入,不需要指定属性名,
当注解的属性是数组类型并且赋值的时候只赋值一个值,那么就可以省略{}.
3.示例
3.1.属性类型(是String)
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.*; //定义此注解保留在字节码中 @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() ; String Color()default "red";//设置默认值是"red" } @MyAnnotation("java") public class ApplyMyAnnotation { public static void main(String[] args) { /** * 这是获得类上的注解,也可以获得方法上的注解,下面就以获得类上的注解为例 */ if (ApplyMyAnnotation.class.isAnnotationPresent(MyAnnotation.class)) {// 判断此类上是否存在指定的注解类 MyAnnotation annotation = (MyAnnotation) ApplyMyAnnotation.class .getAnnotation(MyAnnotation.class); System.out.println("value="+annotation.value()); System.out.println("Color="+annotation.Color()); } } }
结果:
value=java
Color=red
从调用的程序中,也可以看出,只有一个属性可以需要赋值的话,可以省略属性名。否则@注解类(属性名=值)
3.2.综合类型
/*枚举类*/ public enum Week{ SUN,MON; } /** * 注解类 */ public @interface annotationText { String value(); } import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.*; //定义此注解保留在字节码中 @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String value() ; String Color()default "red";//设置默认值是"red" Week week() default Week.MON;//枚举类型 int [] array() default {1,2,3};//数组类型 annotationText annotation() default @annotationText("MY");//注解类型 Class classDemo() default Integer.class;//Class类型 } @MyAnnotation(value="java",Color="green",week=Week.SUN,array=5,annotation=@annotationText("YOU"),classDemo=String.class)//数组array={4,5,6} public class ApplyMyAnnotation { public static void main(String[] args) { /** * 这是获得类上的注解,也可以获得方法上的注解,下面就以获得类上的注解为例 */ if (ApplyMyAnnotation.class.isAnnotationPresent(MyAnnotation.class)) {// 判断此类上是否存在指定的注解类 MyAnnotation annotation= (MyAnnotation) ApplyMyAnnotation.class .getAnnotation(MyAnnotation.class); System.out.println("value="+annotation.value()); System.out.println("Color="+annotation.Color()); System.out.println("week="+annotation.week()); System.out.println("array长度="+annotation.array()。length); System.out.println("注解类型值="+annotation.annotation()。value()); System.out.println("Class类型值="+annotation.classDemo()); } } }
结果:
value=java
Color=green
week=SUN
array长度=1
注解类型值=YOU
Class类型值=classjava.lang.String
4.Method上的注解
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * 注解类 */ @Retention(RetentionPolicy.RUNTIME) public @interface annotationText { String value(); } public class ApplyMyAnnotation { public static void main(String[] args) throws Exception { Method methodshow = ApplyMyAnnotation.class.getMethod("show"); annotationText anno = methodshow.getAnnotation(annotationText.class); System.out.println(anno.value()); } @annotationText("java") public void show() { System.out.println("hello"); } }
结果:
java
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1. 用户角色 管理员 药店员工/药师 客户 2. 功能描述 管理员功能 用户管理 创建、编辑和删除药店员工和药师的账户。 设置不同用户的权限,确保敏感信息的安全。 库存管理 实时监控药品库存状态,设置库存预警,防止缺货或过期。 支持药品入库、出库和退货记录,自动更新库存数量。 商品管理 添加、编辑和删除药品信息,包括名称、规格、价格、生产厂家、有效期等。 分类管理药品,如处方药、非处方药、保健品等。 销售管理 查看和管理销售记录,生成每日、每周和每月的销售报表。 分析销售数据,了解畅销产品和季节性变化,以优化库存。 财务管理 监控药店的收入与支出,并生成财务报表。 管理支付方式(现金、信用卡、电子支付)及退款流程。 客户管理 记录客户的基本信息和购买历史,提供个性化服务。 管理会员制度,设置积分和优惠活动。 药品监管符合性 确保药店遵循相关法规,跟踪药品的进货渠道和销售记录。 提供合规报告,确保按规定进行药品管理。 报告与分析 生成各类统计报表,包括销售分析、库存分析和客户行为分析。 提供决策支持,帮助制定更好的经营策略。 药店员工/药师功能 销售操作 处理顾客的药
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
今天吴老师上课的时候说我.txt
检测骨架图像的交点Matlab代码.rar
MMC simulink 模块化多电平变流器 载波移相 双闭环仿真 输出谐波分析,线性自抗扰控制LADRC 有仿真文件
自动驾驶控制-斯坦利(stanely)算法路径跟踪仿真 matlab和carsim联合仿真搭建的无人驾驶斯坦利控制器仿真验证,可以实现双移线,圆形,以及其他自定义的路径跟踪。 跟踪效果如图,几乎没有误差,跟踪误差在0.05m以内。
TongRDS是redis的国产化替代品之一,里面含有相应的安装部署包及操作流程,详细介绍TongRDS的基本部署和基本开发使用。
基于mpvue实现豆瓣电影微信小程序@zce_mpvue-Douban
隔离型DCDC变器设计,LLC谐振变器闭环仿真,变频控制。 有自己做的对应明 ,十分详细。
Delphi in Depth - FireDAC.rar
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ShellBox微信小程序,集日程查询、成绩查询、电费查询、图书查询等功能于一体的高校微信小软件_ShellBox
Java小程序项目源码,该项目包含完整的前后端代码、数据库脚本和相关工具,简单部署即可运行。功能完善、界面美观、操作简单,具有很高的实际应用价值,非常适合作为Java毕业设计或Java课程设计使用。 所有项目均经过严格调试,确保可运行!下载后即可快速部署和使用。 1 适用场景: 毕业设计 期末大作业 课程设计 2 项目特点: 代码完整:详细代码注释,适合新手学习和使用 功能强大:涵盖常见的核心功能,满足大部分课程设计需求 部署简单:有基础的人,只需按照教程操作,轻松完成本地或服务器部署 高质量代码:经过严格测试,确保无错误,稳定运行 3 技术栈和工具 前端:小程序 后端框架:SSM/SpringBoot 开发环境:IntelliJ IDEA 数据库:MySQL(建议使用 5.7 版本,更稳定) 数据库可视化工具:Navicat 部署环境:Tomcat(推荐 7.x 或 8.x 版本),Maven
微信小程序校园微社区_ zafuBBS
计算图像的多向特征编码 (Contour Code Representation)Matlab代码.rar
电池超级电容混合储能系统能量管理超级电容matlab simulink储能模型仿真,能量管理蓄电池充放电模型 相关参考。
武汉市新版劳动合同
Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作