注解Annotation - Java

注解Annotation

  • 一、介绍
  • 二、使用
  • 三、三个基本的Annotation
  • 四、JDK内置的基本注解类型
    • 1、@Override
    • 2、@Deprecated
    • 3、@SuppressWarnings
  • 五、JDK的元注解
    • 1、Retention
    • 2、Target
    • 3、Documented
    • 4、Inherited

一、介绍

  1. 注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、
    类、方法、属性、构造器、局部变量等数据信息。
  2. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
  3. 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替 java EE 旧版中所遗留的繁冗代码和 XML 配置等。

二、使用

使用 Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。

三、三个基本的Annotation

  1. @Override:限定某个方法,是重写父类方法,该注解只能用于方法
  2. @Deprecated:用于表示某个程序元素(类,方法等)已过时
  3. @SuppressWarnings:抑制编译器警告

四、JDK内置的基本注解类型

1、@Override

@Override:限定某个方法,是重写父类方法,该注解只能用于方法。

class Father{//父类public void fly(){int i = 0;System.out.println("Father fly...");}public void say(){}
}class Son extends Father {//子类@Override   //说明public void fly() {System.out.println("Son fly....");}@Overridepublic void say() {}
}

第十行:

  1. @Override 注解放在fly方法上,表示子类的fly方法时重写了父类的fly
  2. 这里如果没有写 @Override 还是重写了父类fly
  3. 如果你写了@Override注解,编译器就会去检查该方法是否真的重写了父类的方法,如果的确重写了,则编译通过;如果没有构成重写,则编译错误。
    在这里插入图片描述
  4. 看看 @Override的定义
    在这里插入图片描述
    解读: 如果以后看代码中,发现 @interface,这表示一个 注解类
    补充说明:@interface不是interface(不是接口),是注解类,是jdk1.5之后加入的。

【使用说明】
① @Override表示指定重写父类的方法(从编译层面验证),如果父类没有fly方法,则会报错
② 如果不写@Override注解,而父类仍有 public void fly(){},仍然构成重写
③ @Override只能修饰方法,不能修饰其它类,包,属性等等
④ 查看@Override注解的源码为@Target(ElementType.METHOD),说明只能修饰方法
⑤ @Target是修饰注解的注解,称为元注解
在这里插入图片描述

2、@Deprecated

用于表示某个程序元素(类,方法,字段,包,参数 等等)已过时。

在这里插入图片描述
在这里插入图片描述

  1. @Deprecated 修饰某个元素,表示该元素已经过时
  2. 即不在推荐使用,但是仍然可以使用
  3. 查看 @Deprecated注解类的源码:
    在这里插入图片描述
    (1)用@interface修饰:表示是一个注解类。
    (2)@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE}) :表示可以在这些地方使用。
    (3)可以做版本升级过渡。比如 JDK8 升级到 JDK11,有一个类进行了升级,告诉用户这个类已经不推荐使用。

3、@SuppressWarnings

抑制编译器警告。

在这里插入图片描述
有很多警告,但运行没问题。

1、当我们不希望看到这些警告的时候,可以使用 SuppressWarnings 注解来抑制警告信息
2、在{“”} 中,可以写入你希望抑制(不显示)警告信息

@SuppressWarnings({“”})

3、可以指定的警告类型有:

all,抑制所有警告
boxing,抑制与封装/拆装作业相关的警告
cast,抑制与强制转型作业相关的警告
dep-ann,抑制与淘汰注释相关的警告
deprecation,抑制与淘汰的相关警告
fallthrough,抑制与switch陈述式中遗漏break相关的警告
finally,抑制与未传回finally区块相关的警告
hiding,抑制与隐藏变数的区域变数相关的警告
incomplete-switch,抑制与switch陈述式(enum case)中遗漏项目相关的警告
javadoc,抑制与javadoc相关的警告
nls,抑制与非nls字串文字相关的警告
null,抑制与空值分析相关的警告
rawtypes,抑制与使用raw类型相关的警告
resource,抑制与使用Closeable类型的资源相关的警告
restriction,抑制与使用不建议或禁止参照相关的警告
serial,抑制与可序列化的类别遗漏serialVersionUID栏位相关的警告
static-access,抑制与静态存取不正确相关的警告
static-method,抑制与可能宣告为static的方法相关的警告
super,抑制与置换方法相关但不含super呼叫的警告
synthetic-access,抑制与内部类别的存取未最佳化相关的警告
sync-override,抑制因为置换同步方法而遗漏同步化的警告
unchecked,抑制与未检查的作业相关的警告
unqualified-field-access,抑制与栏位存取不合格相关的警告
unused,抑制与未用的程式码及停用的程式码相关的警告

  • 如何精准定位
    鼠标光标放在右侧,这里显示 raw use => 和raw有关,所以选择rawtypes
    在这里插入图片描述
    在这里插入图片描述

4、关于SuppressWarnings 作用范围是和你放置的位置相关
比如 @SuppressWarnings放置在 main方法,那么抑制警告的范围就是 main。
通常我们可以放置具体的语句, 方法,类。

5、@SuppressWarnings 源码
在这里插入图片描述

(1)放置的位置
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
(2)该注解类有一个数组 String[] value();
可以设置一个数组比如{“rawtypes” ,“unchecked”, “unused”}

五、JDK的元注解

JDK的元Annotation 用于修饰其他Annotation。

元注解:本身作用不大,了解即可。看源码时,可以知道它是干什么的。

元注解的种类(使用不多,了解,不用深入研究)
1、Retention——指定注解的作用范围,三种SOURCE,CLASS,RUNTIME
2、Target——指定注解可以在哪些地方使用
3、Documented——指定该注解是否会在javadoc体现
4、Inherited——子类会继承父类注解

1、Retention

基本说明:只能用于修饰一个 Annotation定义,用于指定该Annotation可以保留多长时间,Rentention包含一个 RetentionPolicy类型的成员变量,使用@Rentention时必须为该value成员变量指定值:
在这里插入图片描述
@Retention的三种值
(1)RetentionPolicy.SOURCE:编译器使用后,直接丢弃这种策略的注释
(2)RetentionPolicy.CLASS:编译器将把注解记录在class文件中。当运行Java程序时,JVM不会保留注解。这是默认值。
(3)RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中。当运行Java程序时,JVM会保留注解。程序可以通过反射获取该注解。

进一步解释说明这三种值
《java源文件》通过【javac】编译成《class文件》,再通过【java】运行,运行时加载到JVM中运行。
RetentionPolicy.SOURCE 作用在 《java源文件》
RetentionPolicy.CLASS 作用在 《class文件》
RetentionPolicy.RUNTIME 当在JVM运行时,还保留。

案例 - @override
在这里插入图片描述
说明:Override的作用域在SOURCE,当编译器编译时生效,不会入到.class文件,也不会再runtime(运行时)生效。

2、Target

基本说明
用于修饰Annotation定义,用于指定被修饰的Annotation 能用于修饰哪些程序元素。@Target 也包含一个名为value的成员变量。

在这里插入图片描述
案例 - @Deprecated
在这里插入图片描述

3、Documented

基本说明
@Documented:用于指定被该元Annotation修饰的Annotation类将被 javadoc工具提取成文档。即在生成文档时,可以看到该注释。

案例 - @Deprecated
在这里插入图片描述
怎么理解?这是@Deprecated(过时)的源代码,元注解Documented对其进行了注解。意思是只要用了@Deprecated,那么在生成 javadoc文件的时候,会保留这个注解。

4、Inherited

基本说明
被它修饰的Annotation将具有继承性,如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。

实际应用中使用少。

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

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

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

相关文章

算法通关村第一关—青铜挑战—用Java基本实现各种链表操作

文章目录 第一关—链表【青铜挑战】1.1 单链表的概念1.2 链表的相关概念1.3 创建链表 - Java实现1.4 链表的增删改查1.4.1 遍历单链表 - 求单链表长度1.4.2 链表插入 - 三种位置插入(1)在链表的表头插入(2)在链表的中间插入&#…

Docker安装Elasticsearch以及ik分词器

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析&#xff…

量子芯片:引领计算技术的新篇章

量子芯片:引领计算技术的新篇章 引言 随着量子计算的飞速发展,量子芯片作为量子计算机的核心组件,日益受到人们的关注。量子芯片的出现,不仅有望推动计算技术的革新,更将在信息安全、药物研发、金融投资等领域掀起巨大的变革。在本篇博客中,我们将深入探讨量子芯片的原理…

使用STM32微控制器实现烟雾传感器的接口和数据处理

烟雾传感器是常见的安全检测装置,通过检测空气中的烟雾浓度来提醒用户有潜在的火灾风险。本文将介绍如何使用STM32微控制器来实现烟雾传感器的接口和数据处理。包括硬件连接、采集模拟信号、数字信号处理和报警策略等方面。同时,给出相应的代码示例。 一…

mac 聚焦搜索不显示

我是连搜索框都不显示,不是搜索结果显示异常 点右上角的搜索按钮都毫无反应 我检查过快捷键之类的设置,都正常,最后是通过删除文件解决的 cd ~/Library/Preferences/ rm com.apple.Spotlight.plist 重启 mac 参考 Spotlight Search Not W…

Unity引擎:创造无限可能的游戏开发平台

Unity引擎:创造无限可能的游戏开发平台 一、Unity引擎概述1.1 什么是Unity引擎?1.2 Unity引擎的特点和优势 二、Unity开发环境和工具2.1 Unity编辑器2.2 支持的平台2.3 脚本语言2.4 图形和音频工具 三、Unity游戏开发流程四、示例应用场景五、结论&#…

MySQL-函数

一、统计函数 CREATE TABLE student (id INT NOT NULL DEFAULT 1,name varchar(20) not null default ,chinese float not null default 0.0,english float not null default 0.0,math float not null default 0.0 );insert into student values (1,曹操,77,89,85);insert int…

postgres在docker中使用

记录个人开发过程中postgres在docker中的使用,以便后续查看。 Dockerfile 个人是在M1电脑上开发,所以platform使用linux/amd64来兼容amd芯片。 FROM --platformlinux/amd64 postgres:16.1-alpine COPY ./poetrydb.sql /docker-entrypoint-initdb.d/po…

Jenkins 如何查看已经记录登录服务器的凭证密码

文章目录 一、背景描述二、解决方案一(查看所有账号密码)三、解决方案二(查询指定账号密码) 一、背景描述 在日常的开发过程中,有时候会出现忘记开发、测试服务器的登录密码的情况。此时恰巧 Jenkins 上记录了登录该主…

【笔记】windows+pytorch:部署一下stable diffusion和NeRF

之前都是 *nix 环境使用 pytorch,这次尝试了一下windows。 我们来部署下流行性高的stable diffusion和我觉得实用性比stable diffusion高多了的NeRF Stable Diffusion 其实,我也不知道要写啥,都是按照步骤做就好了,后面等有时间…

如何快速生成项目目录结构树?

经常在网上看到下面这种由一个项目,生成一个结构树,你知道它是怎么生成的吗? 这就是利用本文要介绍的一个工具——Treer,treer就是一款专门用来快速生成目录结构树的命令行工具。 第一步:安装treer 在终端执行全局…

蓝桥杯第199题 扫地机器人 暴力优化 二分法 简单题 C++

题目 扫地机器人 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/199/learning/?page1&first_category_id1&name%E6%89%AB%E5%9C%B0%E6%9C%BA%E5%99%A8%E4%BA%BA 思路和解题方法 首先,通过cin语句输入了终点位置n和障碍物数量k。使用一个数组a来…

微服务学习|初识elasticsearch、操作索引库、文档操作、RestClient操作索引库、RestClient操作文档

初识elasticsearch 什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实…

python+pytest接口自动化(4)-requests发送get请求

python中用于请求http接口的有自带的urllib和第三方库requests,但 urllib 写法稍微有点繁琐,所以在进行接口自动化测试过程中,一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。 requests库 简介 request…

C# WPF上位机开发(倒计时软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…

记录一次现网问题排查(分享查域名是否封禁小程序)

背景: 收到工单反馈说现网业务一个功能有异常,具体现象是tc.hb.cn域名无法访问,客户地区是河南省,这里记录下排查过程和思路。 首先梳理链路 客户端域名 tc.hb.cn cname—> domainparking-dnspod.cn(新加坡clb)—> snat—&…

基于ssm的汽车论坛管理系统设计与实现

基于ssm的汽车论坛管理系统设计与实现 摘要:信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题…

论文学习-Attention Is All You Need

Attention Is All You Need 目前暂时不会用到,大概了解一下即可。 Recurrent model 序列化的计算方式,难以并行,随着序列的增长,以前的记忆会逐渐丢失。而Attention机制可以观察到句子中所有的信息,不受距离影响&…

vuepress-----2、初体验

2、初体验 目标 创建GitHub账号创建Github项目初体验vuepress默认主体的首页 初体验 (opens new window) --- home: true heroImage: /hero.png heroText: Hero 标题 tagline: Hero 副标题 actionText: 快速上手 → actionLink: /zh/guide/ features: - title: 简洁至上deta…

【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…