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

Java基础之注解

3.注解

3.1概述【理解】

  • 概述

    对我们的程序进行标注和解释

  • 注解和注释的区别

    • 注释: 给程序员看的
    • 注解: 给编译器看的
  • 使用注解进行配置配置的优势

    代码更加简洁,方便

3.2自定义注解【理解】

  • 格式

    public @interface 注解名称 {

    ​ public 属性类型 属性名() default 默认值 ;

    }

  • 属性类型

    • 基本数据类型
    • String
    • Class
    • 注解
    • 枚举
    • 以上类型的一维数组
  • 代码演示

    public @interface Anno2 {
    }public enum Season {SPRING,SUMMER,AUTUMN,WINTER;
    }public @interface Anno1 {//定义一个基本类型的属性int a () default 23;//定义一个String类型的属性public String name() default "itheima";//定义一个Class类型的属性public Class clazz() default Anno2.class;//定义一个注解类型的属性public Anno2 anno() default @Anno2;//定义一个枚举类型的属性public Season season() default Season.SPRING;//以上类型的一维数组//int数组public int[] arr() default {1,2,3,4,5};//枚举数组public Season[] seasons() default {Season.SPRING,Season.SUMMER};//value。后期我们在使用注解的时候,如果我们只需要给注解的value属性赋值。//那么value就可以省略public String value();}//在使用注解的时候如果注解里面的属性没有指定默认值。
    //那么我们就需要手动给出注解属性的设置值。
    //@Anno1(name = "itheima")
    @Anno1("abc")
    public class AnnoDemo {
    }
    
  • 注意

    如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可

  • 自定义注解案例

    • 需求

      自定义一个注解@Test,用于指定类的方法上,如果某一个类的方法上使用了该注解,就执行该方法

    • 实现步骤

      1. 自定义一个注解Test,并在类中的某几个方法上加上注解
      2. 在测试类中,获取注解所在的类的Class对象
      3. 获取类中所有的方法对象
      4. 遍历每一个方法对象,判断是否有对应的注解
    • 代码实现

      //表示Test这个注解的存活时间
      @Retention(value = RetentionPolicy.RUNTIME)
      public @interface Test {
      }public class UseTest {//没有使用Test注解public void show(){System.out.println("UseTest....show....");}//使用Test注解@Testpublic void method(){System.out.println("UseTest....method....");}//没有使用Test注解@Testpublic void function(){System.out.println("UseTest....function....");}
      }public class AnnoDemo {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {//1.通过反射获取UseTest类的字节码文件对象Class clazz = Class.forName("com.itheima.myanno3.UseTest");//创建对象UseTest useTest = (UseTest) clazz.newInstance();//2.通过反射获取这个类里面所有的方法对象Method[] methods = clazz.getDeclaredMethods();//3.遍历数组,得到每一个方法对象for (Method method : methods) {//method依次表示每一个方法对象。//isAnnotationPresent(Class<? extends Annotation> annotationClass)//判断当前方法上是否有指定的注解。//参数:注解的字节码文件对象//返回值:布尔结果。  true 存在  false 不存在if(method.isAnnotationPresent(Test.class)){method.invoke(useTest);}}}
      }
      

3.3元注解【理解】

  • 概述

    元注解就是描述注解的注解

  • 元注解介绍

    元注解名说明
    @Target指定了注解能在哪里使用
    @Retention可以理解为保留时间(生命周期)
    @Inherited表示修饰的自定义注解可以被子类继承
    @Documented表示该自定义注解,会出现在API文档里面。
  • 示例代码

    @Target({ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})  //指定注解使用的位置(成员变量,类,方法)
    @Retention(RetentionPolicy.RUNTIME) //指定该注解的存活时间
    //@Inherited //指定该注解可以被继承
    public @interface Anno {
    }@Anno
    public class Person {
    }public class Student extends Person {public void show(){System.out.println("student.......show..........");}
    }public class StudentDemo {public static void main(String[] args) throws ClassNotFoundException {//获取到Student类的字节码文件对象Class clazz = Class.forName("com.itheima.myanno4.Student");//获取注解。boolean result = clazz.isAnnotationPresent(Anno.class);System.out.println(result);}
    }

相关文章:

Java基础之注解

3.注解 3.1概述【理解】 概述 对我们的程序进行标注和解释 注解和注释的区别 注释: 给程序员看的注解: 给编译器看的 使用注解进行配置配置的优势 代码更加简洁,方便 3.2自定义注解【理解】 格式 public interface 注解名称 { ​ public 属性类型 属性名() default 默认值…...

三、线性表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 自学JAVA数据结构笔记&#xff0c;跟学视频为&#xff1a;黑马程序员Java数据结构与java算法全套教程…...

C++统计方形

统计方形 内存限制&#xff1a;256 MB 时间限制&#xff1a;1 S 题目描述 有一个n*m方格的棋盘&#xff0c;求其方格包含多少正方形、长方形&#xff08;此处长方形不包含正方形&#xff09; 输入格式 输入存在多组测试数据。每组测试数据输入两个整数n,m&#xff0c;数字不超…...

Tina_Linux配网开发指南

OpenRemoved_Tina_Linux_配网_开发指南 1 概述 1.1 编写目的 介绍Allwinner 平台上基于wifimanager-v2.0 的WiFi 配网方式&#xff0c;包括softap(WiFi ap 模式热点配网),soundwave(声波配网),BLE(蓝牙低功耗配网)。 1.2 适用范围 • allwinner 软件平台tina v5.0 版本及以…...

高频面试题|RabbitMQ如何防止消息的重复消费?

一. 前言最近有很多小伙伴开始找工作&#xff0c;在面试时&#xff0c;面试官经常会问我们这样一个题目&#xff1a;RabbitMQ如何防止重复消费?有很多小伙伴这个时候都在想&#xff0c;消息怎么还会重复消费呢???.......所以他们在面试后就跑来问壹哥&#xff0c;针对这个比…...

黑盒测试用例设计方法-边界值分析法

目录 一、边界值定义 二、边界值的考虑 三、边界值的优化 四、边界值的设计用例的步骤 五、案例 六、边界值的类型 一、边界值定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下…...

项目风险管理中不可忽视的5个关键点

1、风险意识非常重要 项目经理必须要有风险意识&#xff0c;并不是项目计划做好就万事大吉&#xff0c;而是需要对项目风险进行预判&#xff0c;时刻保持风险意识&#xff0c;及时发现和处理项目风险。 项目风险管理关键&#xff1a;风险意识​ 2、建立组织风险资产库 寻…...

Linux->进程地址空间

目录 前言&#xff1a; 1. 程序地址空间回顾 2. 进程空间是什么 3. 进程地址空间与内存 4. 进程地址空间和内存的关联 5. 为什么要有进程地址空间 前言&#xff1a; 我们在平时学习的过程当中总是听到栈、堆、代码段等等储存空间&#xff0c;但是这些东西到底是什么&…...

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的&#xff0c;而对于因特尔芯片的文章少之又少&#xff0c;这就导致我们还在用老Intel 芯片的Mac本&#xff0c;看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…...

基于stm32电梯管理系统设计

基于stm32电梯管理系统设计这里记录一下以前自己做的嵌入式课程设计&#xff0c;报告中的图片和文字太多了&#xff0c;全部一个一个把搬过来太麻烦了,需要完整文本和代码自行q我963160156&#xff0c;也可在微信公众号 *高级嵌入式软件* 里回复 *电梯* 查看完整版文章摘要关键…...

Spring中的FactoryBean 和 BeanFactory、BeanPostProcessor 和BeanFactoryPostProcessor解析

文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝&#xff0c;定义了容器的⼀些基础⾏为&#xff0c;负责⽣产和管理Bean的…...

【C++从入门到放弃】类和对象(上)

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《C从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 类和对…...

什么牌子的蓝牙耳机便宜好用?四款高品质蓝牙耳机推荐

随着时代的发展&#xff0c;蓝牙耳机的使用频率越来越高&#xff0c;不少人外出时除了带手机外&#xff0c;蓝牙耳机也成为了外出必备的数码产品之一。现在的蓝牙耳机品牌众多&#xff0c;什么牌子的蓝牙耳机便宜好用&#xff1f;下面&#xff0c;我来给大家推荐四款高品质的蓝…...

eddsa 算法

信息安全课程设计&#xff1a;eddsa 算法 一、项目要求 使用 C 语言开发&#xff1b;可以实现公私钥生成、签名、认证&#xff1b;只需要手动输入明文&#xff0c;代码会自动生成公私钥、签名、认证&#xff1b;记录公私钥生成、签名、认证的时间&#xff1b;在 VS 上运行&am…...

Xcode Developer Document 开发者文档

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroDeveloper Documentation 打开方式菜单栏点击 &#xff5c; 快捷键方式另一种打开方式Intro 2016年我在学校学Java的时候&#xff0c;要查某个Java类/方法的用法还得自己手动下载一种.chm格式的开发文档文件&#xff0c…...

IntelliJ插件开发教程之新建项目

JetBrains公司系列产品IDEA、WebStrom、PyCharm、CLion、GoLand等都是基于IntelliJ Platform开发而成&#xff0c;掌握IntelliJ插件开发技能便能拥有提升开发效率的终极武器。本教程Demo源码请微信公众号“开发效率”进行获取。阅读原文如果您是JetBrains产品的用户&#xff0c…...

解决SpringBoot中@RequestBody不能和Multipart同时传递的问题

问题描述 今天在做文件上传的时候&#xff0c;遇到了这么一个错误日志&#xff1a; Resolved[org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘multipart/form-data;boundary--------------------------771899451541318130280588;charsetUTF-8’…...

【华为OD机试模拟题】用 C++ 实现 - 统计匹配的二元组个数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明统计匹配的二元组个数题目输入输出描述示例一输入输出说明示例二输入输出说明备注Code使用说明 参加华为od机试,一定要注意不要完全背诵代码&...

Vuex 面试题总结 的历史汇总!

一.vuex是什么&#xff1f;怎么使用&#xff1f;哪种功能场景使用它&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。简单来说就是&#xff1a;应用…...

Redis缓存更新策略与缓存穿透、雪崩等问题的解决

文章目录一、缓存更新策略1、三种策略2、策略选择3、主动更新的方案二、缓存存在的问题1、缓存穿透2、缓存雪崩3、缓存击穿三、解决缓存问题1、自定义分布式锁2、解决缓存穿透问题3、解决缓存击穿问题一、缓存更新策略 1、三种策略 内存淘汰&#xff1a;redis自带的内存淘汰机…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...