Java学习路线(24)——注解

news/2024/10/30 17:20:05/

一、概述
(一)注解的概述

  • Java 注解(Annotation)又称Java标注,是JDK5引入的注释机制。
  • Java 语言中的类、构造器、方法、成员变量、参数等都可以以注解的形式标注。

(二)注解的作用

  • 对Java中类、方法、变量做标记,然后进行特殊处理。

二、自定义注解
(一)自定义注解格式

public @interface 注解名称 {public 属性类型 属性名() default 默认值;
}

(二)自定义注解示例

public @interface MyBook {String id();String[] names();double price();//特殊的属性value,当只定义一个属性且名称为value则调用时可不写value,若有多个,则必须填写String value();
}

三、元注解

(一)概念: 元注解是以注解的形式作用在注解中的一种注解形式。

(二)常见元注解

  • @Target——约束自定义注解的使用范围
  • @Retention——声明注解的生命周期

(三)常见元注解参数的常用值

@Target——ElementType枚举类

作用域
TYPE类/接口
FIELD成员变量
METHOD成员方法
PARAMETER方法参数
CONSTRUCTOR构造器
LOCAL_VARIABLE局部变量

@Retention——RententionPolicy枚举类

作用域
SOURCE作用于源码阶段,生成的字节码文件不存在
CLASS作用于源码阶段,字节码文件阶段,运行阶段不存在,默认值
RUNTIME作用于源码阶段,字节码文件阶段,运行阶段,开发常用

(四)使用元注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Book{String value();
}

四、注解解析

(一)概念: 注解解析是判断注解是否存在并解析其内容。

(二)相关API

  • Annotation接口:注解的原始接口
  • AnnotationElement:定义了注解解析方法
方法说明
Annotation[] getDeclaredAnnotations()获取当前对象上使用的所有注解,返回注解数组
T getDeclaredAnnotation(Class<T> annotationClass)根据注解类型获得对应注解对象
boolean isAnnotationPresent(Class<Annotation> annotationClass)判断对象是否使用了指定接口

(三)解析注解的技巧: 注解在哪个成分上,先解析哪个成分对象

(四)解析案例

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface Book{String value(); //书名double price() default 100; //价格 默认为100String[] authors(); //多位作者
}@Book(value = "《Java深度学习》",price = 100,authors = {"xxx","xxx","xxx"})
class BookStore{private String name;private double price;private String[] authors;@Book(value = "《Java浅度学习》",price = 50,authors = {"佚名"})public void text(){}@Overridepublic String toString() {return "BookStore{" +"name='" + name + '\'' +", price=" + price +", authors=" + Arrays.toString(authors) +'}';}
}public class AnnotationDemo{@Testpublic void parseClass(){//1、先得到类对象Class c = BookStore.class;//2、判断是否存在if (c.isAnnotationPresent(Book.class)){//3、直接获取注解对象Book annotation = (Book) c.getDeclaredAnnotation(Book.class);System.out.println(annotation.value());System.out.println(annotation.price());System.out.println(Arrays.toString(annotation.authors()));}}@Testpublic void parseMethod() throws NoSuchMethodException {//1、先得到类对象Method c = BookStore.class.getMethod("text");//2、判断是否存在if (c.isAnnotationPresent(Book.class)){//3、直接获取注解对象Book annotation = (Book) c.getDeclaredAnnotation(Book.class);System.out.println(annotation.value());System.out.println(annotation.price());System.out.println(Arrays.toString(annotation.authors()));}}
}/*测试结果*/Java深度学习》
100.0
[xxx, xxx, xxx]
======================Java浅度学习》
50.0
[佚名]

五、注解的应用——模拟Junit测试框架

/*
* 需求:定义若干个方法,只要加了MyTest注解,就可以触发执行
* 分析:获取类中成员方法,判断是否有注解,若有注解则执行,否则不执行
*/public class JunitDemo {@MyJunitpublic static void test1(){System.out.println("=======test1========");}public static void test2(){System.out.println("=======test2========");}@MyJunitpublic static void test3(){System.out.println("=======test3========");}public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {Class anno = JunitDemo.class;Method[] methods = anno.getMethods();for (Method method :methods) {if (method.isAnnotationPresent(MyJunit.class)){method.invoke(anno);}else System.out.println(method.getName() + "未执行");}}}@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface MyJunit{}

http://www.ppmy.cn/news/265545.html

相关文章

银河娱乐场官网:门禁系统 门禁自动化是关键 降低门禁系统维运成本

门禁系统的总成本&#xff0c;可分为采购成本与维运成本。采购成本为一次性费用&#xff0c;是企业采购门禁系统的实际价格&#xff0c;此成本明确。而维运成本则为长期性不间断的费 用&#xff0c;也就是企业为了门禁系统持续运作所投入的人力与物力&#xff0c;这对于长期使用…

2016全球与中国市场门禁系统深度研究报告

报告摘要 本文研究全球与中国市场门禁系统的发展现状及未来发展趋势&#xff0c;侧重从消费的角度分析门禁系统全球与中国市场的总体情况&#xff0c;包括消费量&#xff08;销量&#xff09;、销售价格、销售金额、销量增长率、销售金额增长率及未来5年的市场预测。 本文重点分…

新能源汽车无钥匙门禁系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

本文研究全球与中国市场新能源汽车无钥匙门禁系统的发展现状及未来发展趋势&#xff0c;分别从生产和消费的角度分析新能源汽车无钥匙门禁系统的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、…

门禁系统产品选择与施工要点

门禁系统产品选择与施工要点 前言&#xff1a; 门禁系统施工不只是安装个锁和门禁读卡器&#xff0c;施工的时候还有一些需要注意的地方您知道吗&#xff1f;今天就一起来探讨一下门禁施工需要注意的事项 正文&#xff1a; 现在门禁系统已经深入到人们的生活中&#xff0c;门…

【智能门禁系统】——硬件设计

基于ARMLinux的智能门禁系统是需要运行在嵌入式环境中的&#xff0c;所以需要先设计硬件系统。由于侧重于设计软件&#xff0c;所以本系统从市面上可以购买到硬件进行选择然后组合&#xff0c;并不直接设计电路。本系统的硬件系统由一个ARM开发板、一个IC卡识别模块、两颗摄像头…

门禁系统计算机作用,门禁系统类型和作用有哪些?

原标题&#xff1a;门禁系统类型和作用有哪些&#xff1f; 门禁就是出入口控制&#xff0c;管理什么人什么时间可以进出哪些门&#xff0c;并可自动生成各种报表&#xff0c;提供事后的记录信息等。当出入通道安装了门禁设备后&#xff0c;当人需要通行时&#xff0c;就要进行适…

门禁系统服务器在哪,门禁系统服务器功能配置

门禁系统服务器功能配置 内容精选 换一换 通过华为云创建的ECS服务器默认使用华为云提供的内网DNS进行解析。内网DNS不影响ECS服务器对公网域名的访问。同时&#xff0c;还可以不经Internet&#xff0c;直接通过内网DNS访问其他云上服务内部地址&#xff0c;如OBS、SMN等&#…

门禁系统数据库服务器配置,门禁系统数据库服务器如何配置

门禁系统数据库服务器如何配置 内容精选 换一换 华为云最佳实践,从创建镜像、部署环境、搭建站点和代码实现方式等多方面提供开发实践指导及使用指南,全方面解决用户在使用华为云产品中遇到的常见问题。 使用华为云服务来完成部署,服务器计算资源使用ECS或者BMS,存储使用EV…