Java常用的三种注解

1、 基本注解

一、注解的概念

    1、注解也叫元数据,是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。注解的形式是“@+单词”。 在不改变原有逻辑的情况下,使用注解在源文件中嵌入一-些补充信息。

    2、其实同class、interface一样,注解也是一种类型。

二、注解的作用

    (1)生成文档,通过代码里标识的元数据生成javadoc文档。

    (2)编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。

    (3)编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。

    (4)运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。

三、三种类型的注解

    (1)第一类是Java自带的标准注解。

              @Override:告诉编译器检查当前方法是否覆盖了父类的方法。

              @Deprecated:标示该 方法已经过时,在高版本的代码中进行调用,编译该方法时会进行警告。

              @SuppressWarnings:抑制编译器警告,取消显示的编译器警告信息。

@ Override举例:

Student类的父类是Object类,Object类含有toString()方法,不含有study()方法

@Deprecated举例:

代码:

public class Student {//标记此方法已经过时,在高版本的类中调用此方法时,会显示“过时”警告信息@Deprecatedpublic void study(){}
}

@SuppressWarnings举例:

public class Student {//抹除因为没有启用泛型产生的警告@SuppressWarnings("rawtypes")public List list=new ArrayList();}

@SuppressWarning可以定义成员属性,也可以定义类。

2 、元注解

第二类是元注解(Meta Annotation),也就是用于定义注解的注解。

    @Target:用于指定被修饰的Annotation可用于什么地方

    @Retention:表示需要在什么级别保存该注解信息

    @Documented:表示该注解包含在Javadoc中

    @Inherited:允许子类继承父类中的注解

1、@Target:指定了注解应用的地方,取值如下:

    ElementType.ANNOTATION_TYPE:可以给一个注解进行注解

    ElementType.TYPE:可以给接口、类、枚举等进行注解

    ElementType.FIELD:可以给字段、枚举的常量注解

    ElementType.METHOD:可以给方法注解

    ElementType.PARAMETER:可以给方法参数注解

    ElementType.cONSTRUCTOR:可以给构造方法注解

    ElementType.LOCAL_VARIABLE:可以给局部变量注解

    ElementType.PACKAGE:可以给包进行注解

2、@Retention:当Retention应用到某个注解上表示该注解的存活时间,取值如下:

    RetentionPolicy.soURCE:注解只存在源码阶段,编译器编译时注解失效。

    RetentionPolicy.CLASS:注解保留到编译进行的时候,并不会被加载到JVM中。

    RetentionPolicy.RUNTIME:注解保留到程序进行的时候,会被加裁到JVM中,在程序运行的时候可以获取这些注解信息。

3、 自定义注解-1

第三类是自定义注解,根据自己的需求定义注解,并可用元注解对自定义注解进行注解。语法:

    public @interface 注解名称{ }

根据Annotaion是否包含成员变量,可以把注解分成两类:

    (1)标记注解:没有成员变量的注解类型,该类型注解只提供存在与否的标识信息,例如@Override

    (2)元数据注解:包含成员变量的注解,该类型注解可以接受更多的元数据。

代码:

package cn.edu.xync.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType. TYPE)  //表明该自定叉注解可以应用到什么位置@Retention(RetentionPolicy.RUNTIME) //表明该注解能存活到什么时候public @interface MyAnnotation {//此时该注解为空,表明该自定义注解是一个标记注解String name();  //注解中定义的成员变量后面必须加括号(看着像定义方法)int age();  //包含了成员变量的注解称为元数据注解//成员变量的访问权限只能是共有或者缺省,不能是私有或者受保护
}

在Student类中使用注解@MyAnnotation

总结:

       在Java中,如果你声明了一个变量但没有给它赋初始值,那么这个变量将被赋予默认值。以下是一些常见数据类型的默认值:整型(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)、引用类型(对象、数组),

    这些默认值在Java中被称为缺省值,它们在变量声明时自动赋予,可以通过明确赋值来覆盖这些缺省值。

4、 自定义注解-2

自定义注解设置默认值,在使用时,可以不赋值

修改:@Target(ElementType. METHOD

public interface MyInterface {@MyAnnotationvoid work();
}

修改:@Target(ElementType. FIELD)

public class Student implements Serializable {//抹除因为没有启用泛型产生的警告@SuppressWarnings("rawtypes")@MyAnnotationpublic List list=new ArrayList();
}

5、 自定义注解-3

修改:@Target(ElementType.CONSTRUCTOR)

package cn.edu.xync.annotation;import java.io.Serializable;import java.util.ArrayList;import java.util.List;@SuppressWarnings("serial")//元数据注解需要给成员变量赋值public class Student implements Serializable {//抹除因为没有启用泛型产生的警告@SuppressWarnings("rawtypes")public List list=new ArrayList();private String name;private int age;@Overridepublic String toString() {return "";}@Deprecatedpublic void study(){}@MyAnnotation(name="李四",age=20)public Student(){super();}@MyAnnotation(name="李四",age=20)public Student(String name, int age) {super();this.name = name;this.age = age;}}
修改:@Target(ElementType.PARAMETER)
@Deprecatedpublic void study(@MyAnnotation(name="李四",age=20) String type){}

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

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

相关文章

白化(Whitening)的原理是什么?

**白化(Whitening)**是数据预处理中的一个重要步骤,其目的是将原始数据的各个维度之间的线性相关性去除,并使得每个维度的方差都为1。通过白化,可以简化后续的数据处理步骤,如独立成分分析(ICA&…

ODrive学习笔记一:开发环境搭建

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

【简历】兰州某大学一本硕士:面试通过率基本是为0

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一个一本硕士的Java简历,那这个简历因为学校本身,它是一个一本的硕士,我们一般认为这一本硕士&a…

java-mysql 三层架构

在 Java 应用程序中,三层架构(Three-Tier Architecture)是一种常见的设计模式,用于分离应用程序的表示层、业务逻辑层和数据访问层。这种架构有助于提高代码的可维护性、可扩展性和可重用性。以下是详细解释 Java 应用程序中使用 …

如何增强人工智能的人岗匹配?

你玩过媒人游戏吗?这不是一件容易的事情。在家庭作业的世界里,匹配员工的技能通常是非常具有挑战性的。然而,技术在简化过程中起着至关重要的作用。利用人工智能构建技能本身将建立一个更准确、更动态的数据库,以促进未来人工智能…

MySQL学习(10):事务

1.什么是事务 事务是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 *事务四大特性 原子性事务是不可分割的最小操作单元&#x…

Vxe UI vxe-table column 根据内容的长度来自适应列的宽度

Vxe UI vue vxe-table 根据内容的长度来自适应列的宽度 列的 width 宽度支持多种格式&#xff08;默认情况下是等比例分配&#xff09;&#xff1a; 固定像素&#xff1a;100 或者 ‘100px’ 百分比&#xff1a;‘20%’ 自适应内容&#xff1a;‘auto’ 代码 <template&g…

超声波清洗机哪个牌子好?耐用的超声波眼镜清洗机推荐

超声波清洗机大家也一定不陌生了&#xff0c;提起超声波清洗机啊&#xff0c;大家对他的印象一定是清洗眼镜&#xff0c;这话没毛病&#xff0c;但是&#xff0c;这仅仅只是清洗机的基本功&#xff0c;清洗机的功能远远比咱们想象中的强大&#xff0c;但是目前市面上的小型超声…

【第31章】MyBatis-Plus之注解配置

文章目录 前言一、注解介绍二、注解列表总结 前言 本文详细介绍了 MyBatisPlus 注解的用法及属性&#xff0c;提供了源码链接以便深入理解。欢迎通过下方链接查看注解类的源码。 Mybatis-Plus Annotation 源码 一、注解介绍 Mybatis-Plus注解统一存放在com.baomidou.mybatis…

【JavaScript 算法】动态规划:最优子结构与重叠子问题

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、最优子结构1.1 最优子结构的例子1.2 如何识别最优子结构 二、重叠子问题2.1 重叠子问题的例子2.2 解决重叠子问题的方法2.3 如何识别重叠子问题 三、经典动态规划问题及其 JavaScript 实现3.1 斐波那契数列3.2 背包问题…

GAMMA软件适配航天宏图一号多星干涉数据

文章目录 1.航天宏图一号 X-频段 多基雷达星座2.航天宏图算法人员小结3.双基成像与单基成像干涉处理区别 GAMMA软件是世界著名的瑞士GAMMA遥感公司开发的专门用于干涉雷达数据处理的全功能商业软件。作为业内标杆软件&#xff0c;被全球范围内的研究人员、公司和公共机构广泛使…

MS5199T芯片解决方案以及驱动程序(国产三路5VADC)

一、MS5199T芯片介绍 MS5198T/MS5199T 为适合高精度测量应用的低功耗、低噪 声、三通道差分输入的 16bit/24bit 模数转换器。其内部集成了低 噪声输入缓冲器、低噪声仪表放大器,当增益设置为 64,更新 速率为 4.17Hz 时,均方根噪声为 10nV。 MS5198T/MS5199T 还集 成了低端电…

使用F1C200S从零制作掌机之debian文件系统完善NES

一、模拟器源码 源码&#xff1a;https://files.cnblogs.com/files/twzy/arm-NES-linux-master.zip 二、文件系统 文件系统&#xff1a;debian bullseye 使用builtroot2018构建的文件系统&#xff0c;使用InfoNES模拟器存在bug&#xff0c;搞不定&#xff0c;所以放弃&…

【Docker 系列】学习路线

学习基本概念&#xff1a; 了解容器化与虚拟化的区别了解Docker的基本概念、术语和架构 安装Docker&#xff1a; 根据所使用的操作系统&#xff0c;安装Docker Desktop&#xff08;Windows、macOS&#xff09;或Docker Engine&#xff08;Linux&#xff09; Docker镜像&#xf…

Datawhale 2024 年 AI 夏令营第二期——电力需求预测挑战赛

#AI夏令营 #Datawhale #夏令营 1.赛事简介 随着全球经济的快速发展和城市化进程的加速&#xff0c;电力系统面临着越来越大的挑战。电力需求的准确预测对于电网的稳定运行、能源的有效管理以及可再生能源的整合至关重要。 2.赛事任务 给定多个房屋对应电力消耗历史N天的相关…

【泛型】学习笔记

1.工作中的使用 例子1Getterprivate int type;private Class<? extends AbstractActivity> clazz;ActivityType(int type, Class<? extends AbstractActivity> clazz) {this.type type;this.clazz clazz;}public AbstractActivity newInstance(ActivityEntity…

TCP协议:如何实现客户端和服务器端的交流?

实例&#xff1a;超简陋版人工AI对答程序 一、描述&#xff1a; 在客户端输入问题&#xff0c;服务器端将给出答案。 二、代码示例 1.客户端 步骤&#xff1a; 首先创建一个Scanner对象input&#xff0c;用于从控制台读取用户输入的问题。用户输入的一行文本将存储在quest…

【Jfrog Artifactory】配置邮件服务器

教程使用QQ邮箱 配置路径是&#xff1a; http://IP:8082/ui/admin/configuration/mail 进入到Mail Server&#xff0c;然后按照格式填入&#xff1a; Host &#xff1a;smtp.qq.com 【发送服务器】 Port&#xff1a;587 【我的环境465无法发送成功】 Username&#xff1a;QQ邮…

C++:从C语言过渡到C++

在这篇博客中&#xff0c;我将会介绍从C语言过渡到C的一些基础知识。 目录 C起源 C的关键字 输出hello&#xff0c;world ​编辑 命名空间 1.什么是命名空间 2.namespace的作用 3.域作用限定符 4.命名空间的使用 IO流 缺省参数 函数重载 引用 1.引用的定义 2.引…

【Python3】自动化测试_Playwright最简单示例

启动 Playwright实例&#xff1a;sync_playwright().start() 终止 Playwright 实例&#xff1a;myPlaywright.stop() Playwright 模块提供了一种启动浏览器实例的方法。以下是使用 Playwright 驱动自动化的典型示例&#xff1a; from playwright.sync_api import sync_playw…