Java学习笔记38

news2025/2/26 9:25:06

Java笔记38

注解

什么是注解

  • Annotation是从 JDK 5.0 开始引入的新技术。
  • Annotation的作用︰
    • 不是程序本身,可以对程序作出解释。(这一点和注释 - comment没什么区别)
    • 可以被其他程序(比如编译器等)读取。
  • Annotation的格式︰
    • 注解是以@注释名在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")
  • Annotation在哪里使用?
    • 可以附加在packageclassmethodfield等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

内置注解

  • @Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。
  • @Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
  • @SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息。
    • 与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用就好了。
    • @SuppressWarnings("all")
    • @SuppressWarnings("unchecked")
    • @SuppressWarnings(value={"unchecked" ,"deprecation"})
    • 等等……
  • 我们来写一端简单的代码来帮助我们理解内置注解:
package com.clown.annotation;

//内置注解
public class Test01 {  //默认 extends Object

    //@Override  重写的注解
    @Override
    public String toString() {
        return super.toString();
    }

    //@Deprecated  表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择
    @Deprecated
    public static void test() {
        System.out.println("Deprecated");
    }

    public static void main(String[] args) {
        test();  //被 @Deprecated注解的方法依旧是能够使用的,只是不推荐使用
    }

    /*
    定义一个方法和一个变量,但不使用它们,正常情况下程序在编译时会提出以下警告:Method 'test020' is never used 和 Variable 'name' is never used。
    但我们加上注解:@SuppressWarnings("all") 后,程序在编译时就不再对此方法和方法内的变量提出警告了。
     */
    //@SuppressWarnings("XXX")  抑制编译时的警告信息
    @SuppressWarnings("all")
    public void test02() {
        String name = null;
    }

}
  • 运行结果:

在这里插入图片描述

元注解

  • 元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。
  • 这些类型和它们所支持的类在java.lang.annotation包中可以找到(@Target@Retention@Documented@lnherited )。
    • @Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)。
    • @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期。
      • SOURCE < CLASS < RUNTIME
    • @Document:说明该注解将被包含在javadoc中。
    • @Inherited:说明子类可以继承父类中的该注解。
  • 下面我们使用@interface自己定义一个注解MyAnnotation,然后我们使用元注解对我们定义的注解MyAnnotation进行说明,以此帮助我们更好地理解元注解:
package com.clown.annotation;

import java.lang.annotation.*;

//测试元注解
@MyAnnotation
public class Test02 {

    @MyAnnotation
    public void test() {

    }

}


//@Target  表示该注解可以用在哪些地方
@Target(value = {ElementType.METHOD, ElementType.TYPE})  //表示:注解 - @MyAnnotation可以用在方法(METHOD)或者类(TYPE)上

//@Retention  表示该注解在什么地方还有效
//RUNTIME > CLASS > SOURCE (通常都使用 RUNTIME)
@Retention(value = RetentionPolicy.RUNTIME)  //表示:注解 - @MyAnnotation在源码时、编译为class时以及运行时都有效

//@Documented  表示会将该注解放进 javadoc文档中
@Documented

//@Inherited  表示子类可以继承父类中的该注解
@Inherited
//自己定义一个注解 - MyAnnotation
@interface MyAnnotation {  //@interface  注解类,用来声明一个注解

}

自定义注解

  • 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。
  • 分析:
    • @interface用来声明一个注解,格式:public @interface 注解名 {定义内容}
    • 其中的每一个方法实际上是声明了一个配置参数。
    • 方法的名称就是参数的名称。
    • 返回值类型就是参数的类型(返回值只能是基本类型,ClassStringenum )。
    • 可以通过default来声明参数的默认值。
    • 如果只有一个参数成员,一般参数名为value
    • 注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值。
  • 下面我们来编写代码,自定义两个注解:
package com.clown.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//自定义注解
public class Test03 {

    //注解可以显示赋值。如果该注解没有默认值,我们就必须给注解赋值
    @MyAnnotation2(age = 18, name = "张三")  //参数没有顺序
    public void test() {

    }

    //因为注解 - @MyAnnotation3中只有一个参数,且我们把此参数命名为了 value,所以此处可以省略 value =
    //如果我们把 @MyAnnotation3中的参数命名为了其他名称,如:String name(); ,则此处只能写 name ="李四",不能省略 name =
    @MyAnnotation3("李四")
    public void  test2() {

    }

}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation2 {
    //注解的参数,格式: 参数类型 + 参数名();
    String name() default "";  //default "" - 设置默认值为空字符串
    int age();
    int id() default -1;  //默认值为 -1时,代表不存在

    String[] schools() default {"北京大学", "清华大学"};
}


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation3 {
    String value();  //只有一个参数时,建议使用 value来命名
}

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

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

相关文章

系统认知篇:防腐层、门面模式及适配模式的本质

门面模式和适配器模式是代码级的设计模式&#xff0c;而防腐层本质是一种 防御型策略 &#xff0c;在更高的层级对系统进行解耦 1 关于防腐层 Anti-Corruption Layer(ACL) 如下&#xff1a; Implement a faade or adapter layer between different subsystems that dont share…

用断言更好地实现替换重复出现的单词

断言是指对匹配到的文本位置有要求。也就是说&#xff0c;在有些情况下&#xff0c;我们对要匹配的文本的位置也有一定的要求。为了解决这个问题&#xff0c;正则中提供了一些结构&#xff0c;只用于匹配位置&#xff0c;而不是文本内容本身&#xff0c;这种结构就是断言。常见…

C++_Linux报错问题记录

1、致命错误&#xff1a;vector&#xff1a;没有那个文件或目录 解决&#xff1a;.c文件只会引用C语言的标准库&#xff0c;vecter是属于C的语法&#xff0c;把文件名称改成cpp即可 2、.cpp文件中下面编译语句报错&#xff1a;对‘std::cout’未定义的引用 gcc -o test test.…

docker 报错

问题说明&#xff1a;我是服务器上面的docker拉到本地30卡想用的&#xff0c;但是失败&#xff0c;报错如下&#xff1a; 服务器上面显存驱动是450&#xff0c;本地30卡驱动是470 nvidia-docker run -it --name 20230821_3 --shm-size 16g -p 10029:22 --privileged 20230821_i…

关于cloudflare的“检查站点连接是否安全”一直反复转圈的问题

前一段时间访问不少网站都会出现类似以下的信息&#xff1a; 其中很多时候哦是没有红色框框一栏&#xff0c;就是拼命在转圈和刷新页面&#xff0c;等上一个小时都没用。以上情况看很多网上的说法是卸载浏览器安装的插件。我寻思我也没安装过什么插件。 对于试过网上不少方法但…

java八股文面试[java基础]—— hashCode 与 equals 区别 == 与 equals的区别

两个对象的hashCode()相同时&#xff0c;equals()相等吗&#xff1f;_两个对象的hashcode一样,equal一样么_不想当个程序员的博客-CSDN博客 equals()&#xff1a;比较的是非基本类型的数据的引用地址&#xff08;即内存地址&#xff09;是否相同&#xff0c;但是对于重写equal…

Vulnhub: DOUBLE: 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.209 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.209 目标80端口 sendcommand.php页面源码 写入webshell <?php system($_GET["cmd"]);?> 执行命令 ht…

不修改原图片,自动添加水印

只要添加我写的一个DynaWatermark2.1.1.jar的包,然后在web.xml里配置一下,哪个文件夹下的图片需要动态水印,就可以啦!以后通过页面访问这个文件夹下的图片,就会自动加上水印.但不会修改文件夹里图片本身.   这个jar里面有添加图片水印和文字水印两个servlet.(不能两个都配置,…

《golang设计模式》第二部分·结构型模式-03-组合模式(Composite)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 将叶子节点和复合节点组合起来&#xff0c;定义一个抽象接口遍历他们 1.1 角色 Component&#xff08;抽象构件&#xff09;&#xff1a;为叶子构件和复合构件声明接口&#xff0c;定义了结构…

Docker安装并运行Alertmanager

Linux下安装Docker请参考&#xff1a;Linux安装Docker 简介 Alertmanager是一个独立的告警模块&#xff0c;接收Prometheus等客户端发来的警报&#xff0c;之后通过分组、删除重复等处理&#xff0c;并将它们通过路由发送给正确的接收器&#xff1b;告警方式可以按照不同的规…

openCV实战-系列教程2:阈值与平滑处理(图像阈值/图像平滑处理/高斯/中值滤波)、源码解读

1、图像阈值 t图像阈值函数&#xff0c;就是需要判断一下像素值大于一个数应该怎么处理&#xff0c;小于一个数应该怎么处理 ret, dst cv2.threshold(src, thresh, maxval, type) 参数解析&#xff1a; src&#xff1a; 原始输入图&#xff0c;只能输入单通道图像&#…

/root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘+ssh-rsa‘.

文章目录 1、问题2、查看openssh版本3、解决问题4、重新生成密钥5、查看是否可连接工蜂 1、问题 ssh访问工蜂报错&#xff1a; [rootlocalhost .ssh]# ssh -T gitgit.code.tencent.com /root/.ssh/config line 2: Bad protocol 2 host key algorithms ‘ssh-rsa’. 2、查看o…

如何识别芯片引脚1

当从上面看芯片时&#xff0c;引脚总是按逆时针方向编号。这来自于旧时代的电子管&#xff0c;当从电子管的底部看时&#xff0c;引脚是按顺时针方向编号的。 芯片的标记方式有多种&#xff0c;但是总有一些惯例可循。换句话说&#xff0c;如果你在一个未知的芯片上发现了这些标…

Linux的基础编程——Linux常用操作总结(十一)

前言&#xff1a; 前面我们已经对在Linux系统上的一些常用操作已经有了一个简单的入门与了解&#xff0c;后面的学习中我们还需要对这些操作常加练习&#xff0c;现在让我们对之前的一些常用操作进行的一个简单的总结吧 目录 一、软件安装 CentOS系统使用&#xff1a; Ubun…

pdf转换成excel怎么转换?看看这几种方法

pdf转换成excel怎么转换&#xff1f;转换PDF文件到Excel是一个常见的需求&#xff0c;因为许多工作需要将PDF文件转换成可编辑和可搜索的Excel电子表格。无论是在学校、办公室还是在家里&#xff0c;将PDF文件转换成Excel文件的需求都屡见不鲜。有时候&#xff0c;你可能需要将…

江苏211+双一流学校,专业课比408难度低,来看看23考情吧

南京师范大学 考研难度&#xff08;☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文预计813字&#xff0c;预计阅读&#xff1a;2分钟。 2023考情概况 南…

(五)Docker 安装 redis镜像+启动redis容器(超详细)

输入&#xff1a;su root命令&#xff0c;切换到root 1、启动Docker 启动&#xff1a;sudo systemctl start docker 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 查看docker运行状态&#xff08;显示绿色代表正常启动&#xff09;&#x…

配置真实项目问题1--拉取项目并搭建环境

一、下载nvm安装管理node版本 1.安装nvm之前一定要把电脑中原有的node版本给卸载干净&#xff1b; 2.nvm下载链接&#xff1a;nvm.uihtm.com/ 3.具体安装流程可以参考https://zhuanlan.zhihu.com/p/550264306这篇文档 4.安装之后&#xff0c;在控制台中查看版本node -v,发现依旧…

长胜证券:新三板转板条件?

跟着时间的推移和环境的变化&#xff0c;商场对解决中小企业融资难的需求日益增加&#xff0c;新三板作为商场化的多层次资本商场&#xff0c;为小微企业融资供给了重要途径。但是&#xff0c;跟着新三板商场的逐步老练&#xff0c;越来越多的企业希望通过转板进入更为活泼的A股…

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em

​ 鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工…