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

Java【注解】

概述

①Java的注解又称标注,它是程序的元数据,也是程序代码的标记,主要添加到程序代码上,作说明和解释。元数据是用来描述数据的一种数据。

②Java中的注解可用于类、构造方法、成员变量、方法、参数等的声明中,注解功能不影响程序正常运行,但是对编译器等辅助工具造成影响。

③注解可以在编译、加载类和运导,可以根据注解对数据进行相应的处理。

  • 使用反射功能,可以对程序代码进行分析;
  • 使用系统定主解,可以在编译时对程序进行检查;
  • 使用元注解,可以生成相应的文档。

④注解用在包、类、字段、方法、局部变量、方法参数等的前面,对这些元素进行说明和注释。注解可以自定义,也可以使用系统的注解。

系统注解

1、@Override

  • 用来修饰一个方法,这个方法必须是对父类中的方法的重写。如果一个方法没有重写父类中的方法,在使用这个注解时编译器将提示错误。被@Override注解的方法必须在父类中有同样的方法,编译才会通过。
  • 在子类中重写父类或接口的方法时,@Override并不是必须加上的,但是建议使用这个注解。在某些情况下,若修改了父类方法的名字,那么子类的方法将不再属于重写。由于没有@Override,编译器不会发现问题;但是如果有@Override,编译器就会检查注解的方法是否覆盖了父类的方法。
//步骤一:创建父类
public class Super {public void Method(){System.out.println("父类方法");}
}//步骤二:创建子类
public class Sub {public void method(){System.out.println("子类方法");}
}//步骤三:创建测试类
public class Test {public static void main(String[] args){Super sover = new Sub();sover.Method();  //由于多态存在,调用的是父类的Method(),父类的Method()没有被子类重写}
}
//使用@Override修饰子类的method(),表示这个方法是重写父类的方法
public class Sub {@Overridepublic void Method(){  //由于在父类找不到这个方法,会报错,应改成同名的Method()System.out.println("子类方法");}
}

2、@Deprecated

@Deprecated可以用来注解不再使用已经过时的类、方法和属性。如果代码使用了@Deprecated注解的类、方法和属性,编译器会给出警告。

当使用@Deprecated注解时,建议使用对应的@deprecated JavaDoc符号说明这个类、方法或属性过时的原因以及它的替代方案。

@Deprecated
/*
@deprecated 这个类存在缺陷,使用新的NewDeprecatedTest类替代它
*/
public class DeprecatedTest{
…//类体
}

3、@SuppressWarnings

@Suppress Warnings用来抑制编译器生成警告信息。它修饰的元素为类、方法、方法参数、属性和局变量。当一个方法调用了过时的方法或者进行不安全的类型转换时,编译器会生成警告,此时可以为这方法增加@SuppressWarnings注解,从而抑制编译器生成警告。该注解遵循就近原则。

import java.util.ArrayList;
import java.util.List;public class SuppressWarningsExample {@SuppressWarnings("unchecked")  // 抑制未检查的类型转换警告public static void main(String[] args) {List rawList = new ArrayList();  // 原始类型的使用rawList.add("Hello");rawList.add("World");// 这里的 cast 会产生警告,但我们用 @SuppressWarnings 抑制它List<String> stringList = (List<String>) rawList;  for (String s : stringList) {System.out.println(s);}}
}

自定义注解

在定义自定义注解时,不可以继承其他的注解或接口。@interface只用来声明一个注解,注解中的方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。返回值的类型只能是基本类型、Class、String、Enum。可以通过default关键字声明参数的默认值。

[public | final] @interface 注解名
{

    数据类型 注解元素名() [default 默认值];//注解元素

}

  • 其中,关键字@interface表示声明一个自定义注解,“注解名”是合法的标识符。“注解元素”是无参数的方法,方法的类型表示注解元素的类型。
  • 如果只有一个注解元素,在注解元素名为value的情况下,在使用的时候就可以不写出注解元素名,出注解值即可。
  • 在使用目定义注解时,要将自定义注解放在需要注解的前一行或者同一行,并在自定义注解后的括号中写出注解元素的值。如果使用默认值,则可以不给出注解值。如果只有一个注解元素并且名位value,只需要给出值,不需要给出注解元素名。

注解元素的值

注解元素一定要有确定的值,可以在定义注解时指定它的默认值,也可以在使用注解时指定默认值,非基本类型的注解元素的值不能为null。因此,经常使用空字符串或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.METHOD)        // 注解可以应用于方法
public @interface MyCustomAnnotation {String value() default "default value";
}//使用自定义注解
public class MyClass {@MyCustomAnnotation(value = "Hello, Custom Annotation!")public void myAnnotatedMethod() {System.out.println("Executing myAnnotatedMethod.");}
}//反射获取注解信息
import java.lang.reflect.Method;public class AnnotationProcessor {public static void main(String[] args) {try {MyClass myClass = new MyClass();Method method = myClass.getClass().getMethod("myAnnotatedMethod");// 检查方法是否有自定义注解if (method.isAnnotationPresent(MyCustomAnnotation.class)) {MyCustomAnnotation annotation = method.getAnnotation(MyCustomAnnotation.class);System.out.println("Annotation value: " + annotation.value());}myClass.myAnnotatedMethod(); // 执行方法} catch (Exception e) {e.printStackTrace();}}
}

元注解

Java 5.0 API的 java.lang.annotation 包中提供了4个标准的元注解类型,即@Target、@Retention、aDocumented和@Inherited。它们的作用是对其他注解类型进行注解

1、@Target

@Targett指定注解类型所作用的程序元素的种类。若注解类型声明中不存在Target元注解,则声明型可以用在任一程序元素上;若存在元注解,则编译器强制实施指定的类型限制。

@Target的取值是枚举类ElementType的成员(称为枚举常量)。

2、@Retention

@Retention的作用是指定需要在说明级别保留该注解信息,用于描述注解的声明周期,它取值是枚举类RetentionPolicy的成员。

3、@Docuriented

@Documented指示某一类型的注解将通过javadoc和类似的默认工具进行文档化。

4、@lnherited

继承是Java的一大特征,在类中除了private的成员以外都会被子类继承。默认情况下,父类注解是不会被子类继承的,只有使用元注解@Inherited的注解才可以被子类继承。

多重注解

在注解前使用@Repeatable允许同一类型的注解多次使用。

相关文章:

Java【注解】

概述 ①Java的注解又称标注&#xff0c;它是程序的元数据&#xff0c;也是程序代码的标记&#xff0c;主要添加到程序代码上&#xff0c;作说明和解释。元数据是用来描述数据的一种数据。 ②Java中的注解可用于类、构造方法、成员变量、方法、参数等的声明中&#xff0c;注解…...

基于安卓开发大型体育场管理系统的设计与实现(源码+定制+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

【Go】-Websocket的使用

目录 为什么需要websocket 使用场景 在线教育 视频弹幕 Web端即时通信方式 什么是web端即时通讯技术&#xff1f; 轮询 长轮询 长连接 SSE websocket 通信方式总结 Websocket介绍 协议升级 连接确认 数据帧 socket和websocket 常见状态码 gorilla/websocket实…...

怎么查看员工电脑安装了什么软件

1、使用专业监控软件&#xff1a;安装如金刚钻信息网站行为审计系统、WorkWin等专业的电脑监控软件。这些软件能够实时监控员工的电脑操作&#xff0c;包括安装的软件、运行的程序等。通过软件的管理端&#xff0c;您可以轻松查看员工电脑上安装的所有软件&#xff0c;并可以设…...

面积开运算bwareaopen

一个非常有用的二值图像形态学后处理算法&#xff0c;建立在连通分量分析的基础之上。 bwareaopen 从二值图像中删除小对象 语法 BW2 bwareaopen(BW,P) BW2 bwareaopen(BW,P,conn) 说明 BW2 bwareaopen(BW,P) 从二值图像 BW 中删除少于 P 个像素的所有连通分量&#x…...

TortoiseGit 下载和安装

下载 1&#xff0c;下载路径 Download – TortoiseGit – Windows Shell Interface to Git 2&#xff0c;选择windows64的&#xff0c; 3&#xff0c;下载完成后 安装 1&#xff0c;双击运行&#xff0c;点击next 2&#xff0c;点击next 3&#xff0c;点击next 4&#xff0…...

0x09 瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 - 复现

参考:瑞友 应用虚拟化系统 GetBSAppUrl SQL注入漏洞 | PeiQi文库 (wgpsec.org) 漏洞描述 瑞友应用虚拟化系统中的 GetBSAppUrl 方法存在 SQL注入漏洞。由于请求参数未经过滤,攻击者可以利用此漏洞执行恶意SQL查询,从而获取数据库中的敏感信息。 漏洞影响 受影响版本:瑞友…...

C++(Qt)软件调试---内存调试器Dr.Memory(21)

C(Qt)软件调试—内存调试器Dr. Memory&#xff08;21&#xff09; 文章目录 C(Qt)软件调试---内存调试器Dr. Memory&#xff08;21&#xff09;[toc]1、概述&#x1f41c;2、安装Dr.Memory&#x1fab2;3、命令行使用Dr.Memory&#x1f997;4、Qt Creator集成使用Dr.Memory&…...

Python3自带HTTP服务:轻松开启与后台管理

Python3自带有http服务&#xff0c;可以在服务器&#xff0c;也可以在本地启动&#xff0c;并运行一些常用的网页程序。比如&#xff1a;我们可以把streamlit框架编写的网页放到服务器上&#xff0c;开启http服务&#xff0c;就可以通过网页来调用这个pythont程序了&#xff0c…...

传统行业选择企业大文件传输系统需要注意哪些?

数字化转型的洪流中&#xff0c;传统行业正经历着前所未有的挑战与机遇。随着数据量的激增&#xff0c;企业大文件传输系统的选型成为了一个至关重要的议题。今天小编将深入探讨传统行业在这一过程中的考量因素&#xff0c;并以镭速企业大文件传输系统为例&#xff0c;展示其如…...

如何配置路由器支持UDP

一、UDP协议简介 UDP是一种传输层协议&#xff0c;与TCP&#xff08;传输控制协议&#xff09;不同&#xff0c;它不需要建立连接&#xff0c;因此传输速度较快。由于UDP不需要确认数据包的接收状态&#xff0c;它适用于不需要严格数据完整性但需要低延迟的场景。 常见的UDP应…...

CorePress Pro 网站加载慢 WordPress

一般来说是你用了「CorePress天气模块」 解决方案&#xff1a;这个插件从你右侧边栏里删掉就可以了&#xff08;上方的图中已经是删掉后的效果了&#xff09; 寻找加载时间长的原因&#xff1a; 谷歌浏览器F12->网络->打开录制->ShiftF5 得出结论&#xff1a;和风天气…...

关于uniapp wifi调用走过的坑

1. uniapp老脚手架与uni-wif带来的兼容性问题 且几乎找不到解决方法 2. uni-wif需要插件市场安装 3.还有一种可以使用导入安卓类的方式&#xff0c;可以正常获取到已经连接ssid&#xff08;wifi名称&#xff09;&#xff0c;也可以获取到wifi列表 &#xff0c; 但ScanResul…...

docker学习笔记(1.0)

docker命令 下载镜像相关命令 检索&#xff1a;docker search 比如&#xff1a;docker search nginx 是查看有没有nginx镜像 后面的OK表示是不是官方镜像&#xff0c;如果有就是官方镜像&#xff0c;如果没有就是第三方的。 下载&#xff1a;docker pull 比如&#xff1a…...

如何高效管理知识产权全链条?

为了有效保护企业的创新成果&#xff0c;确保技术创意的顺利转化&#xff0c;以及高效管理知识产权案件&#xff0c;建立一套完善的知识产权管理体系至关重要。对于企业而言&#xff0c;如何有效地管理知识产权的各个环节&#xff0c;从研发项目到技术创意&#xff0c;再到提案…...

禾赛嵌入式面试题及参考答案(2万字长文)

TCP/IP 的连接建立(三次握手)和断开过程(四次挥手) 连接建立(三次握手): 第一次握手:客户端向服务器发送一个 SYN(同步)包,这个包中包含客户端选择的初始序列号(Sequence Number)。此时客户端进入 SYN_SENT 状态,表示客户端已发送 SYN 包等待服务器确认。 第二…...

C++进阶知识1继承

继承 1. 继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承基类成员访问⽅式的变化 1.3 继承类模板 2. 基类和派⽣类间的转换3. 继承中的作⽤域3.1 隐藏规则&#xff1a; 4. 派⽣类的默认成员函数4.1 4个常⻅默认成员函数4.2 实现⼀个不能被继承的类 5. 继承…...

vue中使用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)

实现&#xff1a;使用Excel.js库创建excel文件&#xff0c;然后再使用 file-saver库将 Excel 文件保存到用户的本地计算机。 1.安装&#xff0c;可以使用npm&#xff0c;yarn npm install exceljs npm install file-saver 2.封装生成excel的方法 // 封装exceljs const ExcelJ…...

C语言编写一个五子棋游戏-代码实例讲解与分析

编写一个完整的五子棋游戏&#xff08;Gomoku 或 Gobang&#xff09;在C语言中是一个相对复杂的任务&#xff0c;因为它涉及到用户界面的处理、游戏逻辑的维护以及可能的AI对手设计。在这里&#xff0c;我将提供一个简化的版本&#xff0c;这个版本将使用控制台来接收用户输入&…...

Linux——k8s组件

kubernetes 使用1.31.1 版本搭建集群核心组件&#xff0c;选择flannel 网络插件为整体集群的运行提供网络通信功能。 flannel 网络插件 kube-flannel kube-flannel-ds-9fgml 1/1 Running 1 (18m ago) 2d21h kube-flannel kube-flannel-ds-ghwbq …...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

CppCon 2015 学习:Time Programming Fundamentals

Civil Time 公历时间 特点&#xff1a; 共 6 个字段&#xff1a; Year&#xff08;年&#xff09;Month&#xff08;月&#xff09;Day&#xff08;日&#xff09;Hour&#xff08;小时&#xff09;Minute&#xff08;分钟&#xff09;Second&#xff08;秒&#xff09; 表示…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...