注解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…

225. 用队列实现栈 --力扣 --JAVA

题目 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int…

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

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

大数据-之LibrA数据库系统告警处理(ALM-37015 Gaussdb进程可用文件句柄资源不足)

告警解释 操作系统环境文件句柄不足时,产生该告警。 告警属性 告警ID 告警级别 可自动清除 37015 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生告警…

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

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

mac 聚焦搜索不显示

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

Spring Application Event 在事件驱动设计中的应用

1. 什么是事件驱动设计 我们先从去餐厅吃饭来辅助理解什么是事件驱动设计,我们从点菜到上菜通常涉及到以下角色: 服务员厨师上菜员 不同角色的职责: 服务员负责协助点餐厨师负责制作菜品上菜员负责上菜 我们通过事件的角度来考虑整个流程…

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

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

设计模式 -职责链模式

定义 职责链模式是一种对象行为型模式,它常用于处理具有多个处理者的请求。在一个软件系统中,当一个请求可以被多个对象处理时,这些对象可以组织成一条链,并按照这个链传递请求,从而实现了请求发送者和请求处理者之间…

Java JDK 和 JRE 有什么区别

Java JDK 和 JRE 有什么区别 在Java开发中,Java Development Kit(JDK)和Java Runtime Environment(JRE)是两个关键的概念,它们之间存在一些区别。 Java Development Kit (JDK): 用途&#xff1…

HTML h1和h2的三点区别

HTML中的h1和h2 HTML中,h1和h2都是标题元素,二者的关系可以说是递进或递减的关系,如何理解呢?,HTML文档定义的网页一般会被设计成具有一定的结构,而且通常是具有清晰的结构,比如都具有一个主题…

vmware下ubuntu 22.04从主机复制出错

原因分析 vmware下ubuntu 22.04从主机复制出错,如果确定安装了vmware-tools而且重装之后无法解决,大概率是因为vmware-tools和wayland冲突(ubuntu 22.04默认使用wayland而不是xorg) wayland vs xorg Xorg是X窗口系统的最新版本&…

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…

Vue3中watch和watchEffect的区别及使用场景

Vue3 中 watch 和 watchEffec t的区别及使用场景 在Vue 3中,watch和watchEffect是用于监听响应式数据变化的两个重要API。它们在使用方式和功能上有一些区别,下面将从不同方面进行比较。 1. 使用方式 watch的使用方式是通过在组件选项中定义一个watch…

centos7上源码安装mysql--运维高级

第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…

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 在终端执行全局…