10_2、Java基本语法之注解(Annotation)的使用

news2024/12/25 9:03:13

一、注解的理解

        1、jdk5.0新增
        2、在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE/Android中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

        3、Annotation 其实就是代码里的特殊标记, 这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用 Annotation, 程序员可以在不改变原逻辑的情况下, 在源文件中嵌入一些补充信息。

二、注解的使用示例

        示例1:生成文档相关的注解

/**
	 * 
	* @Description 返回当前团队的所有对象
	* @author suxintai
	* @date 2022年11月14日下午7:38:19
	* @return 包含所有成员对象的数组,数组大小与成员人数一致
	 */
	public Programmer[] getTeam(){
		Programmer[] team = new Programmer[total];
		for(int i=0;i<team.length;i++){
			team[i] = this.team[i];
		}
		return team;
	}

	/**
	 * 
	* @Description 从团队中删除成员
	* @author suxintai
	* @date 2022年11月14日下午7:40:04
	* @param memberId
	 * @throws TeamException 
	 */
	public void removeMember(int memberId) throws TeamException{
		int i = 0;
		for(;i<total;i++){
			if(team[i].getMemberId() == memberId){
				team[i].setStatus(Status.FREE);
				break;
			}
		}
		
		if(i>=total){
			throw new TeamException("找不到该成员,无法删除");
		}
		
		for(int j = i;j<total-1;j++){
			team[j] = team[j+1];
		}
//		team[total-1] = null;
//		total--;
		team[--total] = null;
	}


        示例2:在编译时进行格式检查(JDK内置的个基本注解)
                @Override: 限定重写父类方法, 该注解只能用于方法

class Student extends Person{
    @Override
    public void wolk() {
        System.out.println("学生走路");
    }
}


                @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择


                @SuppressWarnings: 抑制编译器警告
        示例3:跟踪代码依赖性,实现替代配置文件功能,比如:Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署。

 

三、如何自定义注解:仿照@SuppressWarnings

        说明:
                1.声明为@interface
                2.内部定义成员,通常使用value表示
                3.可以指定成员的默认值,使用default来定义
                4.如果自定义注释没成员,表明是一个标识作用

        如果注解成员,在使用注解时,必须指明注解的成员的值,自定义注解必须配上注解的信息处理流程(使用反射才有意义)。

代码示例:

public @interface MyAnnotation {
    String value() default "hello";
}

四、元注解 :对现有的注解进行解释说明的注解。 

        JDK5.0提供了4个标准的meta-annotation类型,分别是:
                1、Retention: 用于指定该 Annotation 的生命周期(SOURCE、CLASS(默认行为)、RUNTIME,只有声明为RUNTIME生命周期的注解才可以通过反射来获取。
                2、Target:用于指定被修饰的 Annotation 能用于修饰哪些程序元素。
        以下两种元注解出现频率较低:
                3、Documented:用于指定被该元 Annotation修饰的Annotation类将被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的。定义为Documented的注解必须设置Retention值为RUNTIME。
                4、Inherited: 被它修饰的Annotation将具继承性。如果某个类使用了被@Inherited修饰的Annotation, 则其子类将自动具该注解。

        类比:元数据的概念:String name = "Tom";

五、 如何获取注解信息

        通过反射获取注解信息(这段内容到后面反射机制中讲解)
        前提:只声明为RUNTIME生命周期的注解才可以通过反射来获取。

六、JDK8中注解的新特性

jdk8中新增了两种注解:可重复注解、类型注解
        1.可重复注解:①在MyAnnotation中声明@Repeatable(),参数为MyAnnotation1.class
                                 ②MyAnnotation中的Retention、Target等注解必须和MyAnnotation1保持一致。

        2.类型注解
             ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如:泛型声明)。
             ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MyAnnotation1.class)
@Inherited
@Target({ElementType.METHOD,ElementType.CONSTRUCTOR,ElementType.TYPE,ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
@Documented
public @interface MyAnnotation {
    String value() default "hello";
}
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.METHOD,ElementType.CONSTRUCTOR,ElementType.TYPE})
public @interface MyAnnotation1 {
    MyAnnotation[] value();
}

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

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

相关文章

小程序项目-后台交互(首页)

目录 一&#xff0c;后台准备 配置数据源 整合mybatis 二&#xff0c;准备前端的首页的数据 封装request 会议展示 一&#xff0c;后台准备 先建一个新的项目&#xff0c;建好后导入相关的pom依赖&#xff0c;将 以下的一些工具类也准备好&#xff0c;工具类可参考前面…

Django学习16 -- ModelAdmin options

参考&#xff1a; Django Documentation Release 4.1.4.dev20221130072229&#xff0c;ModelAdmin options&#xff0c;P988 ~ P1007 &#xff08;补充更新。。。。。。&#xff09;Django学习7 -- 添加个人应用&#xff08;自定义应用页面优化&#xff09;Django学习8 -- 添加…

form表单的基本使用

1、什么是表单 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息&#xff0c;并通过<form>标签的提交操作&#xff0c;把采集到的信息提交到服务器端进行处理。 2、表单的组成部分 <form> <input type"…

c#入门-objtct的方法

声明类型的基类 c#中的类都继承自object类&#xff0c;包括静态类。 静态类只是无法手动指定继承类型&#xff0c;而声明静态类时的关键字class&#xff0c;已经让他派生自object类了。 结构类型继承自ValueType类&#xff0c;而ValueType继承自object类。 数组继承自Array类…

【JavaScript】本地存储(localStorage、sessionStorage、cookie)

文章目录【JavaScript】本地存储(localStorage、sessionStorage、cookie)一. 概念二. 本地存储特性三. 会话级存储四. 持久性存储五. cookie六. 本地存储的区别(1) cookie和storage的区别(2) localStorage和sessionStorage的区别七. 案例&#xff1a;记住用户名【JavaScript】本…

ansible(第二天)

第二章&#xff1a;模块介绍 1.Ansible的三个命令模块 command shell raw 应尽量避免使用这三个模块来执行命令&#xff0c;因为其他模块大部分都是幂等性的&#xff0c;可以自动进行更改跟踪。 command、shell、raw不具备幂等性。注&#xff1a; 幂等性&#xff1a;简单来…

【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

vue3笔记案例——Suspense使用之骨架屏

文章目录skeleton组件sync组件Suspense使用skeleton组件 示例图 代码 <template><div class"sk"><div class"sk-2"><div class"sk-2-1"></div><div></div></div><hr><div class&qu…

亚马逊云科技 Build On -轻松搭建咖啡点单系统

【前言】 1、什么是Build On&#xff1f; Build On是亚马逊团队基于亚马逊云服务开发&#xff0c;打造的一系列可快速上手的实操性活动。通过通俗易懂的场景案例、简单快捷的开发路径&#xff0c;参与者可快速理解目标任务涉及的相关知识&#xff0c;同时对亚马逊云服务具备一…

【回答问题】ChatGPT上线了!推荐30个以上比较好的意图识别模型

【回答问题】ChatGPT上线了&#xff01;推荐30个以上比较好的意图识别github源码&#xff1f; 好的&#xff0c;这里列出 30 个相对比较优秀的意图识别 GitHub 源码&#xff1a; DeepPavlov Rasa Snips spaCy OpenAI GPT OpenAI DialogFlow ChatterBot Botpress Amazon Lex M…

ArcGIS基础实验操作100例--实验41提取道路面中心线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验41 提取道路面中心线 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1…

2022,我遭遇的那些小事

前言 2022&#xff0c;总感觉一晃眼就过去了&#xff0c;不知不觉自己坚持更文已经一周年了。回顾这一周年&#xff0c;无论是在技术成长上还是职业发展上&#xff0c;都有了许多新的体会。 裁员风波 还记得是四、五月份的一个上午&#xff0c;原本还在紧张的加班赶项目&…

educoder数据结构与算法 队列 第2关 实现一个链接存储的队列

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 目录 任务描述 相关知识 编程要求 测试说明 AC_Code 任务描述 本关任务&#xff1a;实现 step2/CLnkQueue.cpp 中的CLQ_IsEmpty、CLQ_Length、CLQ_In和CLQ_Out四个操…

论文阅读和复现:去除PPG运动伪影的IEEE论文

论文阅读和代码复现&#xff1a; 《Combining Nonlinear Adaptive Filtering and Signal Decomposition for Motion Artifact Removal in Wearable Photoplethysmography》 基本介绍&#xff1a; 由于手腕运动造成的噪声&#xff1a;运动伪影&#xff0c;使得PPG方法的心率监…

shell-流程控制之条件判断

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 补充&#xff1a;20G20971520kb [rootcotenos day06]# pwd /root/shell/day06 [rootcotenos day06]# vim free_men.sh #!/bin/bash f…

spring boot启动环境的配置与更改(dev,local,pro)包含单元测试环境

文件类型介绍 properties 该文件是一种key-value的格式&#xff0c;配置文件的特点是&#xff0c;它的Key-Value一般都是String-String类型的&#xff0c;因此我们完全可以用Map<String, String>来表示它。 用Properties读取配置文件非常简单。Java默认配置文件以.pro…

elasticsearch 7.9.3知识归纳整理(二)之es基本原理及使用kibana操作es的常见命令

es基本原理及使用kibana操作es的常见命令 一、es的基本原理与基础概念 1.1 倒排索引 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值&#xff0c;而是由属性值来确定记录…

【机器学习】机器学习中常用的损失函数一览

问题 机器学习中常用的损失函数总结 前言 我们经常听到损失函数、代价函数和目标函数这三种说法&#xff0c;这三种说法有什么联系和区别呢&#xff1f;这里明确下&#xff1a; 损失函数 Loss Function 通常是针对单个训练样本而言的&#xff0c;给定一个模型输出 y^\hat{y…

设计模式 - UML类图

1. 什么是 UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统图形化、能表达软件设计中的动态与静态信息。L从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图部署…

8种数据结构

快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算…