Java语言程序设计——篇九(3)

在这里插入图片描述

     🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿

注解类型

  • 概述
    • 标准注解
      • 实战演练
      • 实战演练
      • 实战演练
    • 定义注解类型
    • 标准元注解

概述

注解以结构化的方式为程序元素提供信息,这些信息能够被外部工具(编译器、解释器等)自动处理。
注解有许多用途,其中包括:

  • 为编译器提供信息。(编译器可以使用注解检测错误或阻止编译警告)
  • 编译时或部署时处理。(软件工具可以处理注解信息生成代码、XML文件等)
  • 运行时处理。(有些注解在运行时可以被检查)
  • 注解是Java源程序添加的说明信息。可以被编译器等工具使用
  • 给Java包、类型、构造方法、方法、成员变量、参数及局部变量进行标注
  • 注解类型是一种特殊的接口类型,像使用类一样,要使用注解必须先定义注解类型(也可以使用语言本身提供的注解类型)。
  • 注解是注解类型的一个实例。就像接口一样,注解类型也有名称和成员。注解中包含的信息采用“键/值”对的形式,可以有零或多个“键/值”对,并且每个键有一个特定类型。它可以是一个Stirng、int或其他Java类型。
  • 在这里插入图片描述
    没有“键/值”对的注解类型
    在这里插入图片描述
    如果注解只需要一个“键/值”对
  • 在Java程序中为程序元素标注注解的语法如下:
  • 格式一:
@AnnotationType
  • 格式二:
@AnnotationType(elementValuePairs)
  • 对没有默认值的元素,都应该以name = value的形式对元素初始化。
  • 如果注解类型是标记注解类型(无元素),或者所有的元素都具有默认值,那么就可以省略初始化器列表。
  • 如果注解类型只有一个元素,可以使用缩略形式初始化
    例:@Copyright(“copyright 2010-2015”)

标准注解

注解的功能很强大,程序员很少需要定义自己的注解类型。Java语言规范中定义的3个注解类型,定义在java.lang包中,分别为

  • ①@Override(可在方法中声明,告诉编译器该方法要覆盖父类方法)

实战演练

标准注解–@Override

public class Parent {
public double calculate(double x, double y){return x * y;}
}
public class Child extends Parent{
@Override
public double calculate(double x, double y){return x * y;}
}
  • ②@Deprecated(可应用于某个方法或类型,指明方法或类型已经被弃用了)

实战演练

标准注解–@Deprecated

标记已被弃用的方法或类型,是为了警告其代码用户,不应该是使用或覆盖该方法,或不该使用或扩展该类型。
public class DeprecatedDemo{@Deprecatedpublic void badMethod(){System.out.println("Deprecated);	}public static void main(String[] args){DeprecatedDemo dd = new DeprecatedDemo();dd. badMethod();//编译文件时,编译器将发出警告}
}
  • ③@SuppressWarnings(注解指示编译器阻止某些类型的警告,具体的警告类型可以用初始化该注解的字符串来定义。

实战演练

标准注解@SuppressWarnings
SuppressWarnings的用法是传递String数组,包含需要阻止的警告,格式如下

SuppressWarnings(value={string-1,, string-1})

eg:该注解可应用于类型、构造方法、方法、成员变量、参数以及局部变量
在这里插入图片描述
【例】SuppressWarnings注解阻止三种警告。

import java.io.Serializable;
import java.util.*;
@SuppressWarnings(value={"unchecked","serial","deprecation"})
public class SuppressWarningDemo {public static void main(String[] args) {Date d = new Date();System.out.println(d.getDate());List myList = new ArrayList();  //该语句仍然有警告myList.add("one");myList.add("two");myList.add("three");System.out.println(myList);}
}

在这里插入图片描述

定义注解类型

  • 用户也可以定义注解类型。注解类型的定义与接口类型的定义类似。注解类型的定义使用interface关键字,前面加上@符号。
 public @interface CustomAnnotation{// 元素或属性声明}

默认,所有注解类型扩展java.lang.annotation.Annotation接口。该接口定义返回class对象的anotationType()方法。

Class <?extends Annotation>annotationType 

该接口还定义了equals()方法、hashCode()方法和toString()方法

 public @interface ClassInfo{可以像类和接口一样编译该注解类型,编译产生ClassInfo.class类文件String created();String author();String lastModified();int version();
}

在注解类型中声明的方法称为注解类型的元素, 它的声明类似于接口中的方法声明,没有方法体,但有返回类型。但只能是基本类型、String、枚举类型、其他注解类型等,不能声明参数

  • 在定义注解时可以使用default关键字为元素指定默认值
  • 如:
 public @interface Version{int major() default 1;int minor() default 0;}

Version注解类型可以用来标注类和接口,也可以供其他注解类型使用。

  • 如:
  public @interface ClassInfo{String created();String author();String lastModified();Version version();
}
  • 注解类型中也可以没有元素,这样的注解称为标记注解(marker annotation),这与标记接口类似。例如,下面定义了一个标记注解类型Preliminary:
public @interface Preliminary { }
  • 如果注解类型只有一个元素,这个元素应该命名为value。例如,Copyright注解类型只有一个String类型的元素,则其应该定义为:
public @interface Copyright {String value();}
  • 这样,在为程序元素注解时就可以不需要指定元素名称,而采用一种缩略的形式:
@Copyright("flying dragon company")

标准元注解

元注解是对注解进行标注的注解,在java.lang.annotation包中定义以下四类元注解类型
⚡️(1) Documented(标记注解类型。对注解类型声明进行标注,使类的实例包含在javadoc工具产生的文档中。)
(2)⚡️ Inherited(标注的注解类型任何实例都会继承。如标注一个类,则注解将会被这个标注类的子类继承)
⚡️(3) Retension(指明被标注的注解保留多长时间。注解值RetentionPolicy是枚举(SOURCE、CLASS、RUNTIME)的一个成员)
(4) ⚡️Target(用来指明那个程序元素可以利用被注解类型进行标注。值为java.lang.annotation.ElementType枚举的一个成员。)
博主用心写,读者点关注,互动传真情,知识不迷路。

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

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

相关文章

Ubuntu22.04重装系统+基础配置

重装系统 note&#xff1a;备份数据&#xff0c;重装系统后home下的文件会丢失&#xff0c;所以先备份一下home的数据到其他的盘/mnt/下里。记住之前系统的DNS&#xff0c;IP和掩码。 先在Ubuntu官网下载22.04桌面版&#xff08;种子链接要用迅雷下载&#xff09;。但是版本还…

分布式ID详解

文章目录 分布式IDUUIDSnowflake算法数据库自增IDLeaf算法Redis自增ID 分布式ID 在我们业务数据量不大的时候&#xff0c;单库单表完全可以支撑现有业务&#xff0c;数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长&#xff0c;主从同步也扛不住了&#x…

数学重大错误:将无穷多各异射(直)线误为同一线

黄小宁 设本文所说集合往往是元不少于两个的集。定义&#xff1a;若数&#xff08;点&#xff09;集A可保距变为B则称A≌B。显然A≌A。 h定理1&#xff1a;数&#xff08;点&#xff09;集AB≌B的必要条件是A≌B。 证&#xff1a;⑴任何图≌本身。⑵若AB则A必可恒等变换地变…

AOP~面向切面编程介绍

AOP基础 概述 AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;面向特定方法的编程。 动态代理是面向切面编程最主流的实现。 SpringAOP是Spring框架的高级技术&#xff0c;旨在管理bean对象的过程中&#xff0c…

7-23学习笔记

一、异常 即程序中一些程序处理不了的特殊情况 Exception 能被程序本身处理( try-catch )&#xff0c; Error 是无法处理的(只能尽量避免)。 1、异常类 Exception 见过的异常 NullPointerException ArrayIndexoutOfBoundException等 String strnull;System.out.println(st…

【独家揭秘】模块化沙箱如何为企业筑起源代码防泄露的铜墙铁壁

在数字化转型的浪潮中&#xff0c;企业信息安全面临着前所未有的挑战&#xff0c;尤其是在源代码和敏感数据的保护方面。深信达SDC沙盒防泄密系统以其独特的模块化沙箱技术和全面的数据防泄密策略&#xff0c;为企业提供了一套高效且可靠的解决方案&#xff0c;确保源代码和重要…

夸克Android一面凉经(2024)

夸克Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。 面试职位: 智能信息-客户端开发工程师-夸克小说 技术一…

【Drools】(二)基于业务需求动态生成 DRL 规则文件:事实与动作定义详解

&#xff08;二&#xff09;基于业务需求动态生成 DRL 规则文件&#xff1a;事实与动作定义详解 在现代业务规则管理系统中&#xff0c;灵活高效地生成和管理规则至关重要。通过上一部分的DRT 规则模板&#xff08;请参考&#xff1a;&#xff08;一&#xff09;基于业务需求动…

檢測代理IP是否乾淨的方法和工具

代理IP的品質和安全性直接影響到使用效果和安全性。因此&#xff0c;檢測代理IP是否“乾淨”顯得尤為重要。那麼&#xff0c;什麼是“乾淨”的代理IP&#xff1f;如何檢測代理IP是否乾淨呢&#xff1f;本文將為你詳細解答。 什麼是“乾淨”的代理IP&#xff1f; “乾淨”的代…

PHP师生荣誉管理系统—计算机毕业设计源码10079

目 录 摘要 1 绪论 1.1 研究背景 1.2论文结构与章节安排 2 师生荣誉管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

基于深度学习的智能行人跌倒监测系统详解

基于深度学习的行人跌倒检测系统&#xff08;UI界面YOLOv8/v7/v6/v5代码训练数据集&#xff09; 引言 行人跌倒检测在智能监控、老年人护理、医疗等领域有着广泛的应用。通过深度学习技术&#xff0c;尤其是YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;我…

通配符 SSL 证书和 Nginx 配置:深入理解与最佳实践

在当今的网络环境中&#xff0c;确保网站的安全性至关重要。SSL 证书在这方面扮演着关键角色&#xff0c;而通配符 SSL 证书则为管理多个子域名提供了便利。本文将深入探讨通配符 SSL 证书的覆盖范围&#xff0c;并讨论如何在 Nginx 中正确配置它们。 通配符 SSL 证书的覆盖范…

UDP connect 内核源码分析

1 从诡异开始 最近遇到一个线上问题&#xff0c;client 发了一个 udp 请求&#xff0c;服务器回了一个响应&#xff0c;但诡异的是&#xff0c;client 的 log 却看不到对应的处理日志。抓包发现内核发出了一个指示 udp 目的端口不可达的 icmp 报文&#xff0c;类似这样的&#…

ES6语法详解,面试必会,通俗易懂版

目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例&#xff1a;使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&a…

Unity Canvas动画:UI元素的动态展示

在Unity中&#xff0c;Canvas是用于管理和展示用户界面&#xff08;UI&#xff09;元素的系统。Canvas动画是UI设计中的重要组成部分&#xff0c;它能够提升用户体验&#xff0c;使界面更加生动和响应用户操作。本文将探讨Unity Canvas动画的基本概念、实现方法以及一些实用的技…

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解&#xff0c;它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时&#xff0c;Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

成为git砖家(7): posh-git的安装和使用

文章目录 1. PowerShell 里的 git 默认使用体验不够好2. posh-git 介绍2.1 安装 posh-git2.2 PS1 显示的内容2.3 补全分支 1. PowerShell 里的 git 默认使用体验不够好 在 Windows 系统上&#xff0c;安装了 git for windows 后&#xff0c; git bash 里的体验确实不错。 但是…

C# 获取 Excel 文件的所有文本数据内容

目录 功能需求 范例运行环境 关键代码 组件库引入 获取Excel文件的文本内容 总结 功能需求 获取上传的 EXCEL 文件的所有文本信息并存储到数据库里&#xff0c;可以进一步实现对文件内容资料关键字查询的全文检索。有助于我们定位相关文档&#xff0c;基本实现的步骤如下&…

js 获取当前网站的协议、域名、端口号

在JavaScript中&#xff0c;你可以通过window.location对象来获取当前网站的URL信息&#xff0c;包括协议&#xff08;protocol&#xff09;、域名&#xff08;hostname&#xff09;、端口号&#xff08;port&#xff09;等。以下是如何分别获取这些信息的示例&#xff1a; 1.…

ThreadSanitizer: signal-unsafe call inside of a signal

如果在tsan中出现&#xff1a; ThreadSanitizer: signal-unsafe call inside of a signal (pid149999) 这一类warrning&#xff0c;那么大概率你是犯了下面的错。 https://man7.org/linux/man-pages/man7/signal-safety.7.html https://owasp.org/www-community/vulnerabilitie…