Java中注解的理解

news2024/11/16 23:36:00

一.什么是注解

1.Annotation是从JDK5开始引入的最新技术

2.Annotation的作用:

1)不是程序本身,可以对程序做出解释,(这一点和注释(comment)没什么区别)。

2)可以被其他程序(比如编译器)读取。

3.Annotation的格式:注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:

@SuppressWarnings(value="unchecked").

4.Annotation可以使用在package,class,method,field等上面,相当于给他们添加额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问。

二.内置注解

@Override :定义在java.lang.Override中,此注释只适用于修辞方法﹐表示一个方法声明打算重写超类中的另一个方法声明。

@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素﹐通常是因为它很危险或者存在更好的选择。

@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息.与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性的使用就好了。


import java.util.ArrayList;
import java.util.List;

//什么是注解
public class Text01 extends Object{

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

    //@Deprecated 不推荐使用的方法,已经过时的方法,但是可以使用
    @Deprecated
    public static void text(){
        System.out.println("过时的方法");
    }

    //@SuppressWarnings("all") 镇压警告,有不同的参数可以用来镇压不同的警告
   @SuppressWarnings("all")
    public void text02(){
        List list=new ArrayList(); //因为没有使用,会有警告
    }
    
    public static void main(String[] args) {
        text();
    }


}

三.元注解

元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明.

这些类型和它们所支持的类在java.lang.annotation包中可以找到.(@Target , @Retention ,@Documented , @lnherited )

@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

@Retention :表示需要在什么级别保存该注释信息﹐用于描述注解的生命周期(SOURCE<CLASS< RUNTIME)

@Document:说明该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解


import java.lang.annotation.*;

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

    @MyAnnotation
    public void text(){

    }
}

//定义一个注解
//Target 表示注解可以使用的地方
//@Target(value = ElementType.METHOD)  只能在方法上使用
@Target(value = {ElementType.METHOD,ElementType.TYPE})  //可以使用在类或者方法删上

//Retention 表示注解在什么阶段还有效
@Retention(value = RetentionPolicy.RUNTIME)

//Documented 表示是否在Javadoc中生成我们的注解
@Documented

//Inherited 子类继承父类的注解
@Inherited
@interface MyAnnotation{

}

四.自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

分析:

@interface用来声明一个注解,格式:public @interface注解名{定义内容}。

其中的每一个方法实际上时声明了一个配置参数。

方法的名称就是参数的名称。

返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)。

可以通过default来声明参数的默认值

如果只有一个参数成员,一般参数名为value

注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值。


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

//自定义注解
public class Text03 {
    
    //若没有默认值必须赋值
    @MyAnnotationo2(name = "李华",age = 19)
    public void text(){}
    
    @MyAnnotation03("李华") //只有一个值且为value时可以省略不写
    public void text2(){
        
    }
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotationo2{
    //注解的参数 : 参数类型 + 参数名();
    String name() default ""; //注解参数可以设置默认值,也可显示赋值
    int age();
    int id() default -1;
    String[] school() default {"清华","北大"};
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation03{
    String value();
}

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

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

相关文章

【论文随笔】Time-Incremental Learning from Data Using Temporal Logics

[1] E. Aasi, M. Cai, C. I. Vasile, and C. Belta, “Time-Incremental Learning from Data Using Temporal Logics.” arXiv, Dec. 28, 2021. doi: 10.48550/arXiv.2112.14300. 好久没看文献了&#xff0c;来更一篇 Outline time-variant weights of STL weights are learn…

【Windows基础】Windows用户和用户组的管理

一、用户账户 什么是用户账户&#xff1f; 不同的用户身份拥有不同的权限每个用户包含了一个名称和一个密码每一个用户登录系统后&#xff0c;拥有不同的操作权限。为不同的账户赋权限&#xff0c;也就是为不用账户的SID赋权限&#xff01;每个用户都有自己的配置文件(家目录…

opcj1——mac下如何快速搭建Java开发环境

这是我们OPCJ的第一篇&#xff0c;搭建基础的开发环境。我们的服务会不断增加新组件&#xff0c;我们这里先介绍如何快速搭建开发环境。一般来说Java程序员的电脑上总是会有一些已经配置好的idea、git、maven或者其他的&#xff0c;如果有的话&#xff0c;调整一下直接用就行了…

欧科云链对话ChatGPT:Web3会颠覆互联网?

最近&#xff0c;要说什么最火&#xff1f; 身为“当红炸子鸡”的ChatGPT 说第二就没人敢说第一 ChatGPT&#xff0c;是OpenAI基于Ai技术而实现的一个辅助引擎&#xff0c;通过大量的资料学习&#xff0c;打造出一个类似搜索引擎一样可以回答问题的工具。 它的爆火&#xff0c;…

uniapp使用unipush推送及java后台推送代码(含本地打包apk使用unipush推送)

你懂的&#xff0c;又是项目用到了&#xff0c;作为程序猿义无反顾需要定时 “进化” &#xff0c;硬头皮去写&#xff0c;虽然曾经作为android开发者写了很多的推送&#xff0c;但是uniapp的推送也是有所差异的&#xff0c;记录一下&#xff0c;以后留用。 首先uniapp的推送u…

深度学习-Tensorboard可视化面板

文章目录简介安装SummaryWriter新建添加数字运行添加图片添加直方图实战前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 Tensorboard是Tensorflow官方提供的实用可视化工具&#xf…

[附源码]JAVA毕业设计宿舍管理系统(系统+LW)

[附源码]JAVA毕业设计宿舍管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

「微服务系列」微服务框架的介绍

为什么要学习微服务框架知识&#xff1f; 从求知的角度、企业的角度&#xff0c;微服务都是必知必会的&#xff01; 需要学习哪些微服务知识&#xff1f; 传统单点架构&#xff0c;无法承载高并发场景&#xff1b;微服务领域按功能模块&#xff0c;将应用拆分成多个服务。大型…

【JavaScript高级】07-ES5、ES6中实现继承,原型及原型链

ES5、ES6实现继承&#xff0c;原型及原型链理解ES5实现继承对象和函数的原型对象的原型函数的原型new、constructor函数原型上的属性优化通过构造函数创建对象原型链原型链实现的继承借用构造函数继承寄生组合实现继承ES5实现继承 对象和函数的原型 对象的原型 JavaScript当…

C#实现发送钉钉工作通知消息

一、实现效果 实现在钉钉的工作中心里面发送消息(比如发送【文本消息】、【markdown消息】等不同类型的内容),实现效果如下: 二、实现思路 2.1、了解钉钉学习路径图 钉钉开放文档 (dingtalk.com)https://open.dingtalk.com/document/org-roadmap 2.2、学习了解钉钉的接入…

cubeIDE开发, stm32的RS485/232串口通信开发要点

一、stm32串口通信 stm32串口通信一般是指通过UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;通用异步收发传输器传输数据&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输&#xff0c;其在…

数据库01_内存分页管理_分段管理_设备管理_IO处理_索引文件结构_文件目录_位示图---软考高级系统架构师008

可以看到数据库方面的考点.在架构里面考4,5分左右 这里只说比较重要的标红的考点. 然后我们来看ER图: 1.首先看一下实体的概念:实体是指的客观存在并相互区别的事物,可以举一个例子,比如一家超市,那么超市经理,员工,部门经理,业务员等等,这都是名词,都是属于实体. 2.然后…

知识图谱-KGE-语义匹配-双线性模型(打分函数用到了双线性函数)-2013:NTN(Neural Tensor Network)

【paper】 Reasoning With Neural Tensor Networks for Knowledge Base Completion 【简介】 本文是斯坦福大学陈丹琦所在团队 2013 年的工作&#xff0c;好像是发表在一个期刊上的。文章提出了用于知识库补全的神经网络框架 NTN&#xff08;Neural Tensor Network&#xff09…

Golang代码质量检查工具GolangCI-Lint(学习笔记)

Golang代码质量检查工具GolangCI-Lint 直接用下面go get的方式会出现报错 go get github.com/golangci/golangci-lint/cmd/golangci-lint解决方法 直接去 https://github.com/golangci/golangci-lint/releases 下载对应版本 go < 1.9 isn’t supported go1.9 is officia…

机器学习之数据分离与混淆矩阵

文章目录[TOC](文章目录)前言数据分离混淆矩阵實戰總結前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容之数据分离与混淆矩阵。 数据分离 前面我们…

多线程间的同步控制和通信

用多线程并发处理&#xff0c;目的是为了让程序更充分地利用CPU &#xff0c;好能加快程序的处理速度和用户体验。如果每个线程各自处理的部分互不相干&#xff0c;那真是极好的&#xff0c;我们在程序主线程要做的同步控制最多也就是等待几个工作线程的执行完毕&#xff0c;如…

weston input 概述

weston input 概述 零、前言 本文描述了有关于 weston (基于 wayland 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 weston 整体或 wayland 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…

Android Studio 导入opencv异常报错紧急救援

Download OpenCV from SourceForge.net 1、下载Android demo之后导入Android Studio 如下图所示 报错信息如下 A problem occurred configuring root project opencv_samples. > Could not resolve all artifacts for configuration :classpath.> Could not find org.j…

校园失物招领毕业设计,学生失物招领系统设计与实现,毕业设计怎么写论文源码开题报告需求分析怎么做

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于web网页的失物招领网站系统&#xff0c;整个网站项目使用了B/S架构&#xff0c;基于java的springboot框架下开发&#xff1b;管理员通过后台录入信息、管理信息&#xff0c;设置网站信息&#xff0c;管理…

8_4、Java基本语法之线程的通信

一、问题的引入 使用两个线程打印 1-100。线程1, 线程2交替打印&#xff1f; 二、解决问题涉及的方法 涉及到的三个方法&#xff1a; 1.wait():一旦执行此方法&#xff0c;那么调用此方法的线程就会进入阻塞状态&#xff0c;并释放同步监视器。 2.notify():一个线程…