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&…

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

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

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

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

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;所以放弃&…

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

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

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…

C++入门基础简述

文章目录 前言1、C首个程序2、namespace关键字3、C输入/输出4、缺省参数5、函数重载6、C中的引用7、const 引用8、指针和引用的关系9、inline关键字10、nullptr关键字 前言 此篇文章主要简述流程&#xff1a;C首个程序 -> namespace关键字 -> C输入/输出 -> 缺省参数 …

【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希

目录 1 -> unordered系列关联式容器 1.1 -> unordered_map 1.1.1 -> unordered_map的文档介绍 1.1.2 -> unordered_map的接口说明 1.2 -> unordered_set 2 -> 底层结构 2.1 -> 哈希概念 2.2 -> 哈希冲突 2.3 -> 哈希函数 2.4 -> 哈希冲…

100 个网络基础知识普及,看完成半个网络高手!

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI 参考模型的层次是什么&#xff1f; 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

公有云API常见的认证方式

公有云API常见的认证方式 Token认证 &#xff08;百度云、腾讯云&#xff09; AK/SK认证 (阿里云、天翼云、腾讯云) RSA非对称加密方式 &#xff08;信核云灾备&#xff09; Token认证 AK/SK认证 RSA认证 种方式使用一对密钥&#xff0c;即公钥和私钥。公钥可以公开&#x…

柳永,市井生活的吟游者

柳永&#xff0c;原名柳三变&#xff0c;字景庄&#xff0c;后改名为柳永&#xff0c;字耆卿&#xff0c;约生于宋太宗雍熙元年&#xff08;公元984年&#xff09;&#xff0c;卒于宋仁宗皇祐五年&#xff08;公元1053年&#xff09;&#xff0c;享年69岁。他是北宋著名词人&am…