Java基础之注解

Java基础之注解

  • 一、Java注解
    • 1.1、内置注解
    • 1.2、元注解
    • 1.3、自定义注解

一、Java注解

注解(Annotation)是一种为程序代码提供元数据(metadata)的方式。注解提供了关于程序代码的额外信息,这些信息可以在运行时或编译时被读取并处理。Java 的注解以 @ 符号开头,例如 @Override@Deprecated 等。

1.1、内置注解

@Override 表示该方法覆盖了父类的方法。通常用于帮助编译器检查是否正确地覆盖了父类的方法。

@Deprecated 表示该方法或类已经过时,不推荐使用。编译器在使用过时的方法或类时会发出警告。

@SuppressWarnings 抑制编译器警告。可以用于特定的方法或整个类。

class Parent {public void printMessage() {System.out.println("Parent class");}
}class Child extends Parent {@Overridepublic void printMessage() {System.out.println("Child class");}
}class DeprecatedExample {@Deprecatedpublic void oldMethod() {System.out.println("This method is deprecated.");}
}class SuppressWarningExample {@SuppressWarnings("unchecked")public void uncheckedOperation() {// 一些操作}
}public class AnnotationExample {public static void main(String[] args) {// 使用 @Override 注解Parent parent = new Child();parent.printMessage(); // 输出 "Child class"// 使用 @Deprecated 注解DeprecatedExample example = new DeprecatedExample();example.oldMethod(); // 输出 "This method is deprecated."// 使用 @SuppressWarnings 注解SuppressWarningExample suppressWarningExample = new SuppressWarningExample();suppressWarningExample.uncheckedOperation(); // 不会产生未经检查的警告}
}

1.2、元注解

元注解是应用于其他注解的注解,用于控制注解的行为。

  • @Retention 指定注解的保留策略,即注解在何时可用。有 RetentionPolicy.SOURCERetentionPolicy.CLASSRetentionPolicy.RUNTIME 三种策略。
  • @Target 指定注解可以应用于的元素类型,如类、方法、字段等。
  • @Documented 表示注解将包含在 JavaDoc 文档中。
import java.lang.annotation.*;@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Inherited
public @interface MyCustomAnnotation {String value() default "default value";int count() default 0;
}@MyCustomAnnotation(value = "Custom Value", count = 42)
class AnnotatedClass {@MyCustomAnnotation(value = "Custom Method")public void annotatedMethod() {// 方法实现}
}public class AnnotationIntegrationExample {public static void main(String[] args) {// 获取类级别的注解信息MyCustomAnnotation classAnnotation = AnnotatedClass.class.getAnnotation(MyCustomAnnotation.class);System.out.println("Class Annotation Value: " + classAnnotation.value());System.out.println("Class Annotation Count: " + classAnnotation.count());// 获取方法级别的注解信息try {AnnotatedClass annotatedInstance = new AnnotatedClass();MyCustomAnnotation methodAnnotation = annotatedInstance.getClass().getMethod("annotatedMethod").getAnnotation(MyCustomAnnotation.class);System.out.println("Method Annotation Value: " + methodAnnotation.value());System.out.println("Method Annotation Count: " + methodAnnotation.count());} catch (NoSuchMethodException e) {e.printStackTrace();}}
}

1.3、自定义注解

自定义注解的定义方式类似于接口,但使用 @interface 关键字。

  • @ interface用来声明一个注解,格式:public@ interface注解名{定义内容}
  • 其中的每一个方法实际上是声明了一个配置参数
  • 方法的名称就是参数的名称
  • 返回值类型就是参数的类型(返回值只能是基本类型, Class, String,enum)
  • 可以通过 defau来声明参数的默认值
  • 如果只有一个参数成员,一般参数名为vaue
  • 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 定义自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyCustomAnnotation {String value() default "default value";int count() default 0;
}// 使用自定义注解
@MyCustomAnnotation(value = "Custom Class", count = 10)
public class AnnotatedClass {@MyCustomAnnotation(value = "Custom Method", count = 5)public void annotatedMethod() {// 方法实现}
}public class CustomAnnotationExample {public static void main(String[] args) {// 获取类级别的注解信息MyCustomAnnotation classAnnotation = AnnotatedClass.class.getAnnotation(MyCustomAnnotation.class);System.out.println("Class Annotation Value: " + classAnnotation.value());System.out.println("Class Annotation Count: " + classAnnotation.count());// 获取方法级别的注解信息try {AnnotatedClass annotatedInstance = new AnnotatedClass();MyCustomAnnotation methodAnnotation = annotatedInstance.getClass().getMethod("annotatedMethod").getAnnotation(MyCustomAnnotation.class);System.out.println("Method Annotation Value: " + methodAnnotation.value());System.out.println("Method Annotation Count: " + methodAnnotation.count());} catch (NoSuchMethodException e) {e.printStackTrace();}}
}

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

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

相关文章

前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

前言 当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 技术框架 vue、js、webpack 解决方案 编译项目时动…

GPS北斗对时服务(时间同步系统)电力变电站应用方案

GPS北斗对时服务(时间同步系统)电力变电站应用方案 GPS北斗对时服务(时间同步系统)电力变电站应用方案 1.概述 在现代电网中,统一的时间系统对于电力系统的故障分析、监视控制及运行管理具有重要意义。变电站的对时是指…

GEE——利用Landsat C02 T1_L2数据进行某研究区的长时序(1985-2023年)NDVI和FVC计算

本教程的主要目的是在2022年底GEE已经不提供LandsatC01数据,所以这里给大家提供数据质量更高的C02数据集,这样我们就可以更快的切换过来。本教程主要目的就是实现NDVI和FVC长时序的计算,从而看某个区域的时空变化特特征。 数据介绍 Landsat C02 T1_L2数据是Landsat 8卫星(…

内网隧道学习

默认密码:hongrisec2019 一.环境搭建 网卡学习 一个网卡一个分段,想象成一个管道 192.168.52一段 192.168.150一段 仅主机模式保证不予外界连通,保证恶意操作不会跑到真实机之上 52段是内部通信,150段属于服务器(…

数据结构 / 结构体指针

1. 格式 struct 结构体名{数据类型 成员1;数据类型 成员2; .... };struct 结构体名 *指针变量名 2. 结构体指针指向普通变量的地址 struct CAR{char name[10];int price; };struct CAR car{"byd",160}; struct CAR *p&car; //p是指向结构体变量car的指针// p…

使用重试和回退机制确保 Spring 微服务中的 API 弹性

在当今的数字环境中,应用程序严重依赖外部 HTTP/REST API来实现各种功能。这些 API 通常会编排复杂的内部和外部 API 调用网络。这创建了一个依赖网络。因此,当依赖的 API 发生故障或停机时,面向主要应用程序的 API 需要熟练、优雅地处理这些…

实验五 键盘按键与数码管显示(汇编与微机原理)

键盘按键与数码管显示 实验目的: 熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘的工作原理及识别键盘按键的方法。 掌握8段数码管显示数字或字符的工作原理和它的使用方法。 掌握用8255扫描键盘及用8255刷新数码管显示…

优秀的员工成为公司的管理者之后,为何表现平庸?因为他们缺乏这些思维

在企业的实践中,我们发现平时能力最强的员工,在被提拔到管理层之后就慢慢变得平庸了,再也不是以前那个无所不能的“企业能人”了,甚至在一些事情的处理上还会有些笨拙。面对这种情况,我们一定会感觉很疑惑,…

Eclipse和Intellij IDEA的格式化代码快捷键

Eclipse和Intellij IDEA的格式化代码快捷键 eclipse的格式化快捷键是 Windows/Linux: Ctrl Shift F Mac: Cmd Shift F 按下这个组合键将会对当前编辑的代码进行格式化,使其符合你在Eclipse配置中定义的代码样式规范。你可以在Eclipse的偏好设置中配置代码格式化…

PC8231(CC/CV)5V/2.4A同步降压芯片 频率可调 限流欠压补偿

一.概述 PC8231 是一款同步降压转换器, 该转换器可驱动输出 2.4A 负载电流。 设计允许 PC8231 在 9V 到40V 宽输入电压范围内工作。通过将 COMP/EN 引脚逻辑电平拉低来实现外部关断功能,并进入待机模式。外部补偿使反馈控制环路具有良好的线…

JavaScript 原型,原型链的特点

JavaScript 的原型(Prototype)和原型链(Prototype chain)是 JavaScript 面向对象编程中的重要概念。 原型(Prototype) 在 JavaScript 中,每个对象都有一个原型对象,而这个原型对象…

CRM的智能招投标对企业有什么意义?

如今CRM系统的生态系统越来越壮大,这些工具的集成极大地丰富了CRM系统的应用场景,例如CRM系统集成企业微信等社交媒体为获客提供便利;再比如CRM集成ChatGPT提高邮件内容质量,对于经常接触招投标项目的业务人员来说,在C…

英特尔工作站:助力专业用户实现高效创作

原创 | 文 BFT机器人 英特尔工作站是由全球知名的英特尔公司设计和开发的一款计算平台。英特尔在工作站处理器领域将其产品分为性能型和移动型两类,它的诞生旨在满足专业用户在科学、工程、设计等领域对高性能计算的需求。英特尔工作站配备了最新的英特尔处理器、大…

EI期刊论文复现:考虑电动汽车可调度潜力的充电站两阶段市场投标策略程序代码!

本程序代码参考EI期刊论文《考虑电动汽车可调度潜力的充电站两阶段市场投标策略》,程序中基于历史数据评估可调度潜力,由联合报价模型确定节点边际电价,作为报价的参考,包含个体竞价模式,纳什博弈竞价,算例…

docker (简介、dcoker详细安装步骤)- day01

一、 为什么出现 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应…

Git远程仓库常用开发命令和理解

远程仓库 创建与合并分支 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。 HEAD严格来说不是指向提交,而…

01.vue3大事件——项目初始化、技术介绍

后台数据管理系统 - 项目架构设计 在线演示:https://fe-bigevent-web.itheima.net/login 接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项…

不能打电话的流量卡真的合法?一篇文章让你读懂这个问题!

不能打电话的流量卡合法吗?主要还是看你选择的流量卡类型了。 ​  市面上不能打电话的流量卡大致分为两种: 一种是不带手机号码的物联卡,企业设备采购的话是合法的,一般运营商在将物联卡发售给企业法人后,为每个企业…

工作流能实现自动化吗?应该用什么工具?

研究显示,CRM系统工作流自动化软件不仅能简化冗余的工作且不需要监控和指导就能提高员工的工作效率。企业需要工作流自动化软件吗?答案是肯定的,工作流自动化的好处有哪些? 为什么企业需要工作流自动化软件 每家企业都希望降本增…

项目启动出现白屏问题需要刷新后才能显示解决方案

Vue项目起始时出现白屏问题需要刷新后才能显示解决方案 项目加\<div>为什么页面会出现加载过慢问题&#xff1f;如何让页面变得更快懒加载静态资源缓存 Webpack解决方案减少Js冗余操作 项目加<div> 在vue中,我们常常会因为在template模板中没有加div标签而使得页面…