Java技术之注解

news2025/2/24 15:08:07

前言

Java的反射和注解是Java和Android程序员必须掌握的技术,注解使程序员可以将重复冗余的工作封装到一个框架里面,提供一个简单的API接口给程序使用,典型的有黄油刀(ButterKnife)、ARouter、EventBus等都使用了注解。这些优秀的框架都是使用了注解来提供一些包、类、方法、成员变量的辅助信息,然后程序使用反射机制来读取这些注解信息,然后做一些事,比如黄油刀会通过注解来读取到控件的ID,然后框架去实现findViewById()方法,让程序员不再一遍又一遍的写findViewById了。下面就让我们一起来了解下Java的注解吧。

什么是注解

注解(Annotation) 是从JDK5.0开始引入的新技术,他的作用是可以对程序作出解释,并且可以被其他的程序读取,例如可以被编译器读取。注解在代码中是以“@注释名”存在于代码中,也可以加一些参数值,例如:@SuppressWarnings(value=“unchecked”).注解可以用在代码中的 package(包), class(类), method(方法), field(成员变量) 上面,用于添加额外的辅助信息,Java程序可以通过反射机制编程实现对这些元数据的访问。

元注解

元注解就是负责注解其他注解的注解,听着有点拗口,其实就是用在我们定义的注解上面的注解,元注解的作用是提供对我们定义的注解类型进行说明,比如我们的注解在代码的那个阶段有效呀之类的。Java提供了4个标准的元注解类型,这些类型可以在java.lang.annotation包中找到,他们分别是:@Target, @Retention, @Documented, @Inherited 这几个注解的解释和使用如下:

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

@Retention: 表示需要在什么级别下保存该注解信息,用于描述注解的生命周期

(SOURCE < CLASS < RUNTIME)

@Documented: 该注解将被包含在Javadoc中

@Inherited: 该注解可以被子类继承

使用示例:

import java.lang.annotation.*;

//可以在类上使用我们的注解
@MyAnnotation
public class Demo {
    //也可以在方法上使用我们的注解
    @MyAnnotation
    public void func() {
    }
}

//表示注解可以使用在哪些地方
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//注解在什么阶段有效
//取值:RetentionPolicy.SOURCE < RetentionPolicy.CLASS < RetentionPolicy.RUNTIME
@Retention(value = RetentionPolicy.SOURCE)
//@Documented 表示注解将会生成在JAVA DOC中
@Documented
//@Inherited 子类可以继承父类的注解
@Inherited
@interface MyAnnotation {
}

自定义注解

其实在上面的MyAnnotation就是一个自定义注解,我们可以使用@interface 声明注解,我们声明的注解会自动继承java.lang.annotation.Annotation接口

@interface MyAnnotation {
}

说明:

声明自定义注解的格式:
public @interface 注解名称{定义的内容}

定义的内容: 是一些方法,每个方法实际上就是配置参数,方法名称就是参数名称
返回值的类型就是参数的类型(只能是基本类型,Class,String,enum),可以通过default来声明默认值
如果只有一个参数成员,一般参数名为value,注解元素必须要有值,定义注解元素时,经常使用空字符串,0作为默认值

接下来通过一个例子来看下自定义注解:

import java.lang.annotation.*;

//可以在类上使用我们的注解
@MyAnnotation
public class Demo {
    //也可以在方法上使用我们的注解,可以传入咱们配置的参数啦
    @MyAnnotation(name = "张三",age = 30,id = 9527,books = {})
    public void func() {
    }
}

//表示注解可以使用在哪些地方
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//注解在什么阶段有效
//取值:RetentionPolicy.SOURCE < RetentionPolicy.CLASS < RetentionPolicy.RUNTIME
@Retention(value = RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    String name() default "";
    int age() default 0;
    int id() default -1;
    String[] books() default {"C语言入门到入土","金瓶梅"};
}

我们可以看到代码中定义自定义注解的时候有一个default关键字,这个关键字的意义就在于可以使用它为配置的参数设置默认值,这样的话我们使用注解时不传入值的时候就会使用注解的默认值,否则我们必须为注解赋值,否则无法使用注解,如下图所示:

在这里插入图片描述

总结

本文主要介绍了Java的注解技术,包括什么是注解,如何使用注解,各种注解的使用。我们在很多的框架中都能看到注解的使用,所以学好注解是很有必要的。有了注解技术的加持,我们会在阅读框架源码时更轻松。

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

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

相关文章

win7下安装postgreSQL教程

系统环境&#xff1a;Windows 7 旗舰版 64位操作系统 安装版本&#xff1a;postgresql-9.1.4-1-windows-x64 安装步骤&#xff1a; 1、下载系统对应的软件版本&#xff1b; 2、双击“postgresql-9.1.4-1-windows-x64.exe”打开安装窗口&#xff1b; 3、Welcome页&#xff0c;…

ChatGPT来了,英语不能丢,但我不想上班

文 / 谷雨&#xff08;微信公众号&#xff1a;王不留&#xff09; 好久没写文&#xff0c;可能大伙已把我忘了。春节之后&#xff0c;状态一直不太好。我在2月1号时从老家直接来到了深圳出差&#xff0c;而后以996的工作状态疲于应付工作中的各种问题。 终于这周末休息了两天&a…

【linux安装redis详解】小白如何安装部署redis,linux安装部署只需5步骤(图文结合,亲测有效)

【写在前面】前端时间接触了一下redis&#xff0c;也是迫于页面查询响应太慢&#xff0c;没办法听说redis这个可持久化内存数据库&#xff0c;于是乎便想着在自己的机器上安装一套&#xff0c;接下来就重点和大家说说怎么从小白开始摸索redis 目录1、下载2、安装2.1 创建文件存…

全开源无加密的RuleApp文章社区APP客户端源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 开源无加密的文章社区客户端源码分享 RuleApp文章社区&#xff0c;VIP会员&#xff0c;写作投稿积分商城&#xff0c;付费模块集成&#xff0c;多平台兼容这是一款开源免费&#xff0c;界…

事件流、事件冒泡、阻止冒泡

1、事件流 2、事件冒泡&#xff1a;从小到大 概念&#xff1a; 当一个元素的事件被触发时&#xff0c;同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒泡 <style> .father{width: 300px;height: 300px;background-color: pink; } .son{width:…

sshdo使用training mode来获得incoming ssh会执行什么命令

前言上一篇文章(使用sshdo限制incoming ssh只能执行指定命令)[https://blog.csdn.net/thesre/article/details/129135045] 介绍了如何配置并使用sshdo。有同学就遇到问题了&#xff0c;说我怎么知道我要允许哪些命令&#xff1f;那么&#xff0c;本文以TurboVNC客户端连接Turbo…

2023-02-20干活小计:

所以我今天的活开始了&#xff1a; In this paper, the authors target the problem of Multimodal Name Entity Recognition(MNER) as an improvement on NER(text only) The paper proposes a multimodal fusion based on a heterogeneous graph of texts and images to mak…

【Maven】(一)5分钟做完 Maven 的安装与配置

1.前言 在安装Maven之前&#xff0c;先简单的介绍一下。 Maven 是一款构建工具&#xff0c;它抽象项目构建的生命周期并提供了一个标准的、跨平台的构建流程&#xff0c;让我们在各类操作系统的环境中&#xff0c;都只需要使用一个简单的指令&#xff08;如 mvn clean instal…

网络安全态势感知研究综述

摘要&#xff1a;随着物联网、云计算和数字化的迅速发展&#xff0c;传统网络安全防护技术无法应对复杂的网络威胁。网络安全态势感知能够全面的对网络中各种活动进行辨识、理解和预测。首先分别对态势感知和网络安全态势感知的定义进行了归纳整理&#xff0c;介绍了网络安全态…

使用带有 Moveit 的深度相机来避免碰撞

文章目录 什么是深度相机?如何将 Kinect 深度相机添加到您的环境中在 Rviz 中可视化深度相机数据在取放场景中使用深度相机将深度相机与您的 Moveit 设置一起使用有很多优势。机器人可以避免未知环境中的碰撞,甚至可以对周围的变化做出反应。然而,将深度相机连接到您的设置并…

vue2组件

文章目录注册组件组件的理解为什么使用组件组件化组件化思想的应用复用组件注册组件创建组件构造器注册组件使用组件全局组件和局部组件全局组件局部组件组件的嵌套注册组件的语法糖组件命名组件名关于组件标签组件模板的分离写法组件的data必须是一个函数关于VueComponent组件…

华为电脑录屏,3个方法,轻松录屏

华为电脑录屏是一项非常实用的功能&#xff0c;可以帮助小伙伴轻松的记录和分享屏幕上的操作内容。华为电脑提供了内置的录屏工具&#xff0c;可以进行全屏录制&#xff0c;小伙伴也可以选择使用电脑QQ录屏功能和数据蛙录屏软件进行华为电脑录屏。让我们一起来了解一下华为电脑…

一文掌握人才盘点工具方法及步骤【附实用模板】

很多人认为人才盘点是HR的事情&#xff0c;作为项目经理和PMO基本上没有操心过&#xff1f;但是真正用人的人是你&#xff0c;为公司拿结果的人也是你&#xff0c;但是你从来没有盘点过有多少人&#xff0c;什么样的人可用&#xff1f;这些人的能力如何&#xff1f;潜力如何&am…

Windows启动docker客户端报错:Hardware assisted virtualization and enabled in the BIOS

报错内容 : &#x1f31f;1.在控制面板中点击 启用或关闭Windows功能&#x1f31f;2.勾选如下复选框&#x1f31f;3.Windows功能中没有Hyper-V复选框怎么办?(如果有请跳过此步骤)此时不同人的电脑还会出现没有Hyper-V选项的情况1.打开 Windows PowerShell&#xff0c;输入 sys…

pytest进阶之html测试报告

pytest进阶之html测试报告 目录&#xff1a;导读 前言 pytest-html生成报告 安装 生成报告 效果 错误用例截图 添加描述 小结 allure2生成报告 安装allure 安装pytest-allure-adaptor插件 生成xml格式报告 添加环境变量 运行allure生成报告 效果 总结 前言 …

【UnityAR相关】Unity Vuforia扫图片成模型具体步骤

1 资产准备 导入要生成的fbx模型&#xff08;带有材质&#xff09;&#xff0c; 你会发现导入fbx的材质丢失了&#xff1a; 选择Standard再Extract Materials导出材质到指定文件夹下&#xff08;我放在Assets->Materials了 ok啦&#xff01; 材质出现了&#xff0c; 模型…

linux查看WWN号及常见问题解决

linux查看WWN号及常见问题解决查看WWN号查看WWID号查询常见问题查看WWN号 要查看CentOS 6.7版本的WWN号&#xff0c;可以执行以下步骤&#xff1a; 1.确保已经连接了存储设备。 lspci | grep -i fibre2.在终端中输入命令&#xff1a;lsscsi&#xff0c;然后按 Enter 键。该命令…

Nacos快速使用指南

简单例子&#xff1a;springboot快速集成nacos官方github文档命名空间是绝对隔离的。group之间可以通过配置实现跨 group访问配置中心Nacos config官方文档应用级别的默认配置文件名&#xff08;dataId&#xff09;dataId 的完整格式如下&#xff1a;${prefix}-${spring.profil…

【C++】thread|mutex|atomic|condition_variable

本篇博客&#xff0c;让我们来认识一下C中的线程操作 所用编译器&#xff1a;vs2019 阅读本文前&#xff0c;建议先了解线程的概念 &#x1f449; 线程概念 1.基本介绍 在不同的操作系统&#xff0c;windows、linux、mac上&#xff0c;都会对多线程操作提供自己的系统调用接口…

Linux Crontab命令定时任务基本语法与操作教程

Linux Crontab命令定时任务基本语法与操作教程 一、Crontab查看编辑重启 1、查看crontab定时执行任务列表 crontab -l 2、编辑crontab定时执行任务 crontab -e 3、删除crontab定时任务 crontab -r 4、相关命令&#xff1a; sudo service crond start #启动服务 sudo …