Java常用的三种注解

news2024/9/25 13:21:18

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 {
    //标记此方法已经过时,在高版本的类中调用此方法时,会显示“过时”警告信息
    @Deprecated
    public 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 {

    @MyAnnotation

    void work();
}

修改:@Target(ElementType. FIELD)

public class Student implements Serializable {

    //抹除因为没有启用泛型产生的警告

    @SuppressWarnings("rawtypes")

    @MyAnnotation

    public 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;


    @Override

    public String toString() {

        return "";

    }


    @Deprecated

    public 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)
@Deprecated

public void study(@MyAnnotation(name="李四",age=20) String type){

}

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

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

相关文章

《系统架构设计师教程(第2版)》第11章-未来信息综合技术-07-大数据技术概述

文章目录 1. 大数据的定义2. 大数据的研究内容2.1 面临的问题2.2 面临的挑战2.3 分析步骤2.3.1 数据获取和记录2.3.2 信息抽取和清洗2.3.3 数据集成、聚集和表示2.3.4 查询处理、数据建模和分析2.3.5 解释 3.大数据的应用领域3.1 制造业的应用3.2 服务业的应用3.3 交通行业的应…

Nifi中的Controller Service

Service简介 首先Nifi中的Controller Service 和我们MVC概念中的Controller Service不是一个概念,Nifi中的Controller Service更像是和Processor同级的一个概念,它和Processor在我个人的使用经验来理解的话就是它是预制好的各种服务,可以被P…

java入门1.5.0

前言: 在java入门1.4.0中,我们快速构建了一个基于Maven管理的Spring boot3项目,对基本文件结构有了初步的认知,创建了git仓库 正片: 看山是山,看山不是山,看山还是山,下面两段代码很好了验证这…

51单片机嵌入式开发:9、 STC89C52RC 操作LCD1602技巧

STC89C52RC 操作LCD1602技巧 1 代码工程2 LCD1602使用2.1 LCD1602字库2.2 巧妙使用sprintf2.3 光标显示2.4 写固定长度的字符2.5 所以引入固定长度写入方式: 3 LCD1602操作总结 1 代码工程 承接上文,在原有工程基础上,新建关于lcd1602的c和h…

逐步实践复现 SELF-RAG

SELF-RAG 简介 SELF-RAG(Self-Reflective Retrieval-Augmented Generation)是一种检索增强生成(RAG)的框架,它通过自我反思学习检索、生成和批判,以提高大型语言模型(LLM)的质量和真…

谷粒商城实战笔记-28-前端基础-技术栈简介

文章目录 一,学习目标1,VSCode的使用2,开发语言ES6的学习目标3,Node.js的学习目标4,Vue的学习目标5,Babel的学习目标6,webpack的学习目标 二,前后端技术栈的比较 本节的主要内容是介…

KEIL下载芯片包记录

第一步 第二步 第三步

oracle 23ai新的后台进程bgnn介绍

前言 昨天发文研究了哪些oracle 后台不能杀 具体文章如下链接 oracle哪些后台进程不能杀?-CSDN博客 其中23ai中新增了一个后台进程bgnn 但是在oracle 23ai database reference中并没有找到该后台进程 有点不甘心就开了个SR,找oracle 官方来看看这个后…

Go语言---定时器

定时器 Timer-只响应一次 Timer 是一个定时器,代表未来的一个单一事件,可以告诉 timer 要等待多长时间,它提供一个 channel,在将来的那个时间那个 channel 提供了一个时间值。 2s后,往timer.C写数据,有…

智慧教育解决方案PPT(44页)

1. 教育信息化1.0与2.0 教育信息化1.0注重全体教师和学生的教学与学习应用,以及数字校园建设。2.0则强调宽带网络、优质资源和网络学习空间的普及,提高信息化应用水平和师生信息素养,建立教育资源和管理公共服务平台,推动“互联网…

【系统架构设计师】九、软件工程(项目管理|进度管理|软件配置管理|软件质量管理|软件风险管理 )

目录 十四、项目管理 14.1 软件进度管理 14.1.1 工作分解结构 14.1.2 Gantt 图 和 PERT 图 14.1.3 关键路径法 14.1.4 浮动时间 14.2 软件配置管理 14.3 软件质量管理 14.4 软件风险管理 相关推荐 历年真题练习 十四、项目管理 软件项目管理的对象是软件工程项目。…

3.Softmax回归

回归和分类 回归估计一个连续值 分类预测一个离散类别 Softmax回归实际是一个分类问题 从回归到多类分类 对类别进行一位有效编码 y [ y 1 , y 2 , ⋯ , y n ] T y[y_1,y_2,\cdots,y_n]^T y[y1​,y2​,⋯,yn​]T,如果是第i类,则值为1,否则为0 使用…

摸鱼大数据——Kafka——Kafka的shell命令使用

Kafka本质上就是一个消息队列的中间件的产品,主要负责消息数据的传递。也就说学习Kafka 也就是学习如何使用Kafka生产数据,以及如何使用Kafka来消费数据 topics操作 注意: 创建topic不指定分区数和副本数,默认都是1个 分区数可以后期通过alter增大,但是…

k8s集群离线部署

K8s离线部署 环境 目标 k8s离线部署 步骤 部署docker 详情见文章:《离线安装docker及后端项目离线打包》 https://blog.csdn.net/qq_45371023/article/details/140279746?spm1001.2014.3001.5501 所用到的所有文件在: 链接:https://pan…

摸鱼大数据——Kafka——Kafka的集群搭建

1、软件安装 搭建Kafka集群 1、下载安装 安装包下载地址:https://kafka.apache.org/download 2、将Kafka的安装包上传到虚拟机,并解压 cd /export/software/ tar -xzvf kafka_2.12-2.4.1.tgz -C ../server/ 配置软连接: cd /export/server ln -s kaf…

Debezium日常分享系列之:Debezium 3.0.0.Alpha1 Released

Debezium日常分享系列之:Debezium 3.0.0.Alpha1 Released 一、重大改变Java 和 Maven 要求已更改 二、新的特征和提高MongoDB 三、更多内容 Debezium 3 的第一个预发布版本 3.0.0.Alpha1。这个版本虽然比正常的预版本要小,但高度关注几个关键点&#xff…

【漏洞复现】Splunk Enterprise for Windows 任意文件读取漏洞 CVE-2024-36991

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 Splunk Enterprise 是一款强大的机器数据管理和分析平台,广泛应用于企业中,用于实…

【单片机毕业设计选题24058】-基于嵌入式的智慧酒店管理系统设计与实现

系统功能: 系统分为主机端和从机端,主机端主动向从机端发送信息和命令,从机端 收到主机端的信息后回复温湿度和光照强度信息。 从机端操作: 从机端上电后显示“欢迎使用智慧酒店系统请稍后”两秒后进入正常显示界面。 第一行显示系统状态…

文心快码——百度研发编码助手

介绍 刚从中国互联网大会中回来,感受颇深吧。百度的展商亮相了文心快码,展商人员细致的讲解让我们一行了解到该模型的一些优点。首先,先来简单介绍一下文心快码吧。 文心快码(ERNIE Code)是百度公司推出的一个预训练…

Go语言---并发编程之channel(双channel,单channel)以及应用实例(生产者消费者、打印机模型)

Channel goroutine 运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 通过通信来共享内存,而不是其享内存来通信。 引用类型 channel 是CSP 模式的具体实现,用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。 chan…