JavaSE之注解

news2024/9/21 19:00:27

目录

  • 注解的属性类型
  • 元注解
    • 注解解析
  • 模拟junit
  • 最后

注解的属性类型

注解只能存放简单的数据
如:

基本数据类型
String
Class
注解
枚举
以上类型的一维数组

格式:

public @interface 注解名称 {

public 属性类型 属性名();
}

public @interface MyAn1 {
    public String name();//String类型
    int age();//基本数据类型
    Class aaa();//Class类型
    Enum1 bbb();//枚举类型
    //注解类型
    MyAn2 ddd();
    //以上类型的一维数组
    //不能用自定义类型
    String[] ccc();
    String value();//名字为value时,在用注解时可以省略
}
public @interface MyAn2 {//空注解
}
public @interface MyAn3 {
    String name();
    int age();
}
@MyAn3(name = "李四",age = 99)
public class Demo {
    public static void main(String[] args) {

    }

}

元注解

什么是元注解?

修饰注解的注解

元注解@Target

正常情况注解可以放在类的任何一个元素上面

作用:

用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。

可使用的值定义在ElementType枚举类中,常用值如下
TYPE,类,接口

FIELD, 成员变量

METHOD, 成员方法

PARAMETER, 方法参数

CONSTRUCTOR, 构造方法

LOCAL_VARIABLE, 局部变量

元注解@Retention

作用
用来标识注解的生命周期(有效范围)

可使用的值定义在RetentionPolicy枚举类中,常用值如下

默认是CLASS

SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在

CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值

RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段

注解解析

注解解析就是得到注解中的数据

AnnotatedElement接口

Annotation[] getAnnotations() 获取所有注解

< Annotation > T getAnnotation(Class< T > annotationClass) 获取一个指定的注解

boolean isAnnotationPresent(Class< Annotation > annotationClass) 判断是否有指定的注解

如何解析注解?

通过反射来解析注解,原则注解在谁头上就用谁来解析

如果注解在构造方法上,使用Constructor来获取

如果注解在成员方法上,使用Method来获取

如果注解在成员变量上,使用Field来获取

定义这样一个注解,必须是RUNTIME时期,因为getAnnotations只能拿到RUNTIME时期的注解

@Retention(RetentionPolicy.RUNTIME)
public @interface StudentAnno {
    String name();
    int age();
    String[] parent();
}

将注解用于此类方法

public class Student {

    @StudentAnno(name = "elephant",age = 11,parent = {"dog", "cat"})
    public void study(){
        System.out.println("认真学习");
    }
}

解析注解

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
        Class<Student> cls = Student.class;
        Method study = cls.getMethod("study");
        boolean b = study.isAnnotationPresent(StudentAnno.class);
        if (b) {
            StudentAnno annotation = study.getAnnotation(StudentAnno.class);
            System.out.println("我的名字是" + annotation.name() + "\r\n" + "今年" + annotation.age() + "岁\r\n" + "父母是" + Arrays.toString(annotation.parent()));
        }
    }

在这里插入图片描述

模拟junit

首先创建一个注解

@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}

接着在方法上添加注解

public class Teacher {

    /*
    所以junit里面的方法是public 无返回值 ,无参数
    方便反射
     */
    public void study(){
        System.out.println("学习");
    }

    @MyTest
    public void eat(){
        System.out.println("吃饭");
    }

    @MyTest
    public void sleep(){
        System.out.println("睡觉");
    }
}

最后解析注解,如果有此注解则运行方法

public static void main(String[] args) throws Exception {
        Class<Teacher> cls = Teacher.class;
        Method[] methods = cls.getMethods();
        Teacher teacher = cls.getConstructor().newInstance();
        for(Method m : methods){
            boolean b = m.isAnnotationPresent(MyTest.class);
            if(b){
                m.invoke(teacher);
            }
        }
    }

最后

如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拼搏半个月,刷了 571道Java高频面试题喜提阿里 offer

今年较往年相比面试要难的多&#xff0c;大环境也是对于程序员的要求越来越高&#xff0c;环境是我们无法改变的&#xff0c;我们能改变的只有自己&#xff0c;月初我一好友&#xff0c;努力拼搏一周&#xff0c;刷完了这份阿里 P8 大牛整理的这 571 道 Java 高频面试题笔记&am…

Node.js | Express+MongoDB 实现简易用户管理系统(三)(登录验证之CookieSession)

&#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f5a5;️ 本系列专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ TS知识总结&#xff1a;十万字TS知识点总结 &#x1f449; 你的一键三连是我更新的最大动力❤️&#xff0…

STM32 cubeMX配置串口重定向

文章目录前言一、工程配置二、串口重定向的原因三、实现串口重定向1.如何实现重定向2.具体步骤总结前言 这篇文章主要讲解什么是串口重定向&#xff0c;为什么要串口串口重定向。 一、工程配置 1.芯片选型 我这里使用的是STM32 103ZET6大家可以根据自己板子的型号进行芯片的…

【HCIE考试喜报】2022年11月11日考试通过

网络工程师认证&#xff1a;HCIE&#xff08;华为ICT专家认证&#xff09;_微思xmws的博客-CSDN博客_hcie证书华为HCIE课程介绍HCIE认证概述HCIE-R&S认证定位于大中型复杂网络的构建、优化和管理。HCIE-R&S认证包括但不限于&#xff1a;不同网络和各种路由器交换机之间…

Windows环境下使用命令行在达梦数据库导入dmp文件

注意&#xff1a; 1.创建的用户要跟dmp文件中的一致 2.为什么使用命令行&#xff1f;因为这样可以不用关心由于字符编码不一致导致导入不成功。 3.一定要给权限&#xff0c;我这里全部都给了&#xff0c;自己用的本地库&#xff0c;具体还没总结 4.如何查看已经安装的达梦数据库…

20K+ SRE面试题分享

今天群里有位老哥面试20K的SRE顺手拍了3张面试题,和大家分享一下.第三张实在太模糊就没放了. 第三张实在拍的太模糊 1. 选择题 没发 2. 填空题(共20题&#xff0c;每题2分&#xff0c;总分40分&#xff0c;请在括号里填入最合适的答案) 某文件的权限为drw-r–r–用数值形…

python基础语法>>基本数据类型

一个喜欢算法的大三在校学生,每周都会将学到的知识贡献给大家。☁️&#x1f4a1;&#x1f388; 开始之前&#xff0c;不妨休息一下&#xff0c;先看个小动画&#x1f375;&#xff0c;才能激情地去学习&#xff01; 用python的一个小turtle画了一个简易版的图书馆 python语法大…

概述机器学习算法(机器学习)

目录 机器学习的一般步骤 分类算法 决策树 支持向量机 最近邻算法 贝叶斯网络 神经网络 聚类算法 K—均值算法 BIRCH算法 CURE算法 OPTICS算法 关联分析算法 Apriori算法 FP-growth算法 回归分析算法 线性回归 逻辑回归 多项式回归 邻回归 LASSO回归 深度…

U++学习笔记 ------ 多播委托

多播委托 1、可以绑定多个回调函数&#xff0c;所有绑定的回调函数都会执行&#xff0c;实质是维持了一个单播委托的数组没有返回值支持参数不支持反射以及序列化 绑定多播委托 Add&#xff1a;将函数委托添加 到该多播委托的调用列表中。 AddStatic&#xff1a;添加原始C指针…

类和对象(下)

关于类和对象依旧有许多难点&#xff0c;这篇博客将会讲解关于类的构造函数的初始化列表&#xff0c;静态成员&#xff0c;友元&#xff0c;内部类&#xff0c;以及匿名对象等一些比较复杂的东西。 初始化列表 我们之前就已经学过类和对象的构造函数&#xff0c;但是实际上那并…

[小技巧]C# 反射

文章目录定义Namespace场景示例简单反射一个对象进行操作反射一个有参构造函数的对象反射一个泛型类型的对象简单反射一个方法进行操作反射一个泛型方法进行操作反射一个静态&#xff08;Static&#xff09;方法定义 反射提供描述程序集、模块和类型的对象&#xff08;Type 类…

设计模式----工厂模式

设计模式----工厂模式 文章目录设计模式----工厂模式一.简介1. 什么是工厂模式&#xff1f;2. 工厂模式的类型&#xff1f;3. 工厂模式的使用场景&#xff1f;二. 使用1. 简单工厂模式2. 工厂方法模式3. 抽象工厂模式一.简介 1. 什么是工厂模式&#xff1f; 工厂模式&#xff…

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day03】分类管理

文章目录前言公共字段自动填充问题分析代码实现功能测试功能完善新增分类需求分析模型代码开发功能测试分类信息分页查询需求分析代码开发功能测试删除分类需求分析代码开发功能完善修改分类需求分析代码实现结尾&#x1f315;博客x主页&#xff1a;己不由心王道长&#x1f315…

11.17 - 每日一题 - 408

每日一句&#xff1a; 世上没有侥幸的成功&#xff0c;只有加倍的努力。 数据结构 1 一棵左右子树均不空的二叉树在先序线索化后&#xff0c;其中空的链域的个数是______ A. 0B. 1C 2D.不确定答案&#xff1a;B 解析&#xff1a;线索二叉树利用了二叉链表中的空的左右孩子指…

高通导航器软件开发包使用指南(3)

高通导航器软件开发包使用指南&#xff08;3&#xff09;3.2 实时数据查看3.3 日志分析3.4 其他日志记录系统信息3.4.1查看数据记录选项3.4.2确保日志存储3.4.3获取snav_vector版本3.2 实时数据查看 snav_sinspector控制台应用程序允许以人工方式查看日志文件中的二进制数据 …

java项目-第142期ssm美食推荐系统-ssm毕业设计_计算机毕业设计

java项目-第142期ssm美食推荐系统-ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm美食推荐系统》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、热门美食、美食教程、美食店铺 、美食社区、美食资…

Arthas教程

Linux环境安装 下载地址&#xff1a;https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar 运行 quit 退出 stop 停止Arthas快速入门 一.执行一个jar包 二.通过arthas来attach&#xff08;黏附&#xff09; 三.常用命令操作 诊断demo下载http…

Oracle Primavera Unifier活动管理器(Activity Manager)

目录 一、简要介绍 二、其他相关 一、简要介绍 Oracle Primavera Unifier Activity“活动”被定义为必须按计划完成的工作或事件的一部分。 Activity也就是以上的活动&#xff0c;它从映射的 P6 项目中捕获计划数据&#xff0c;从公司级主费率表&#xff08;默认&#xff0…

大数据必学Java基础(一百零二):连接池的使用

文章目录 连接池的使用 一、连接池基础知识扩展 二、代码实战 1、定义连接池

信道划分介质访问控制ALOHA协议CSMA协议CSMA/CD协议轮询访问MAC协议

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录传输数据两种链路点对点链路广播式链路介质访问控制静态划分信道动态划分信道轮询访问介质访问控制随机访问介质访问控制---所有用户都可以随机发送信息ALOHA协议------想说就说CSMA协议------先听再说1-坚持…