Java面试题-Java核心基础-第十一天(注解)

目录

一、注解是什么?

二、注解的作用?

三、Java中的内置注解有哪些?

四、如何自定义一个注解?

五、JDK8中的新特性


一、注解是什么?

注解就是一种可以标注在类、属性、方法、方法参数等结构上面的一种特殊“注释”,其实就可以看作是一种注释,这些注释信息可以生成文档、可以进行编译检查、可以在运行时获取到注释信息

二、注解的作用?

1. 生成文档 类上面的作者、时间、简要信息等信息  方法上面的对方法进行上面  对方法参数、返回值进行说明

2. 编译检查,例如@Overide  可以检查方法是否是重写的方法 

@Deprecated是标识方法已过时  @SuppressWarnings标明要忽略的警告 在编译是能够进行检查

3. 编译时动态处理:可以在编译时对代码的元数据信息进行动态处理,比如动态生成代码

4. 运行时动态处理:可以在运行时对代码的元数据信息进行动态处理,比如利用反射创建实例

一般需要结合反射使用才能发挥作用

三、Java中的内置注解有哪些?

1. Java自带的标准注解:

@Overide、@Deprecated是标识方法已过时、@SuppressWarnings标明要忽略的警告 编译的时候会对其进行检查

2. 元注解

@Target:标明注解能放置到那些位置上

@Target({ElementType.TYPE,ElementType.FIELD}) 可以声明的类型:

TYPE(类型,指的是类、接口、枚举)、FIELD(属性)、METHOD(方法)、PAR AMETER(参数)、CONSTRUCTOR(构造器)、LOCAL_VARIABLE(局部变量)、ANNOTATION_TYPE(注解类型)、PACKAGE(包)、TYPE_PARAMETER(类型 参数)、TYPE_USE(类型参数,更加广泛)

@Retention:标明注解的生命域 

属性值是RententionPolicy类型的枚举值:SOURCE(表示只存在于源文件中,编译后的字节码中不存 在,并且不能通过反射获取到)、CLASS(表示在字节码中也存在了,但还是不能通过反射获取到),RUNTIME(表示可以通过反射获取到)

@Retention(RetentionPolicy.RUNTIME)

@Inherited元注解:加上其注解,表示其被修饰的注解可以被子类所继承

@Document元注解:表示在生成的文档中,能包含注解信息

四、如何自定义一个注解?

1. 使用@Interface创建注解

2. 写好注解的元注解

3. 写好注解里面的属性:

注意如果只是一个value可以忽略,如果有多个参数的情况下,只有其他参数都有默认值的情况下,value才能进行忽略

类型也不是任意的类型都行的,类型只能时  八种基本数据类型及其对应的包装类型、String、Class、Enum 、注解类型及这些类型对应的数组类型

五、JDK8中的新特性

1. 可重复注解

就是可以在结构上面重复的写一个相同的注解,在jdk8之前需要使用注解数组的方式

1. 定义你要重复的那个注解:

@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {String value();Status status() default Status.OK;
}

2. 构造一个注解表明你要重复  属性类型就是注解数组

@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
//因需要重复的注解而构造的s注解属性值必须是value
public @interface MyAnnotations {MyAnnotation [] value();
}

 3. 在之前你要重复的那个注解上面加上@Repeatable(value = MyAnnotations.class)元注解

@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(value = MyAnnotations.class)
public @interface MyAnnotation {String value();Status status() default Status.OK;
}

使用:

@MyAnnotation("abc")
@MyAnnotation("def")
public class MidStudent extends Student{
}

2. 类型注解

顾名思义就是在类型前面加上注解,用来 解释 类型

像这样:

public class School <@MyAnnotation1(value = "fa") T >{public void dosome(T t){//这种类型注解如果能使用,得在注解的Target元注解加上ElementType.TYPE_USE@MyAnnotation1("da") String name = "";}
}

使用的条件是在@Target注解中写好ElementType.TYPE_USE类型

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE})
@Inherited
@Documented
public @interface MyAnnotation1 {String value();
}

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

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

相关文章

解决“您点击的链接已过期”;The Link You Followed Has Expired的问题

今天WP碰到一个坑。无论发布文章还是更新插件、更换主题都是这么一种状态“您点击的链接已过期”&#xff1b;The Link You Followed Has Expired 百度出来的答案都是修改post_max_size 方法1. 通过functions.php文件修复 这种方法更容易&#xff0c;只需将以下代码添加到Wor…

Flutter和SwiftUI比较

0.语言 SwiftUI 毫无疑问是Swift语言编写&#xff0c; 在2019年正式推出&#xff0c;目前最新是Swift 5.9 (2023年9月)&#xff0c;由Apple公司维护和发行&#xff1b; 该编程语言发明人已离职Apple。 语言官网&#xff1a;https://developer.apple.com/swift/ 最好用Xcode编…

maven仓库改国内源

今天准备复现漏洞环境&#xff0c;发现太慢&#xff0c;需要配置国内源 file -> settings 搜索maven 修改settings.xml&#xff0c;这里的需要修改两个文件 1.上图的settings.xml文件 2.idea的maven模块 settings.xml文件将原来的注释掉&#xff0c;然后把阿里的添加上&…

【前端设计模式】之调停者模式(中介者模式)

调停者模式是一种行为设计模式&#xff0c;它通过引入一个调停者对象来集中处理一组对象之间的交互。调停者模式的目标是减少对象之间的直接通信&#xff0c;从而降低耦合度&#xff0c;并且使代码更易于维护和扩展。 调停者模式特性 将对象之间的通信集中在一个调停者对象中…

Web前端—Flex布局:标准流、浮动、Flex布局、综合案例(短视频首页解决方案)

版本说明 当前版本号[20231024]。 20231024初版 目录 文章目录 版本说明目录Flex布局01-标准流02-浮动基本使用产品区域布局HTML标签CSS样式 清除浮动场景搭建额外标签法单伪元素法双伪元素法overfow法 03-Flex布局Flex组成主轴对齐方式侧轴对齐方式修改主轴方向弹性伸缩比弹…

【Spring Cloud】seata分布式事务官方入门案例(导读2)

文章目录 1. 准备seata环境1.1. 生产环境启动seata1.2. 采用代码启动seata 2. 开始测试3. 附录3.1. 如果第一次配置seata压缩包3.2. 常见问题参考 本文是针对官方seata入门文章https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/user-guide/seata/quick-start的 补充说明&#xf…

第3章 指令级并行及其利用

3.1 指令级并行&#xff1a;概念和挑战 1985年之后几乎所有处理器都使用流水线来使指令能重叠执行。由于指令可以并行执行&#xff0c;所有指令之间的这种可能得重叠称为指令级并行ILP。 ILP大体有两种实现方法&#xff1a; 1. 依靠硬件来动态发现并实现并行&#xf…

基于C语言 --- 自己写一个通讯录

C语言程序设计笔记---039 C语言之实现通讯录1、介绍C/C程序的内存开辟2、C语言实现通讯录2.1、ContactMain.c程序大纲2.2、Contact2.h2.3、Contact2.c2.3.1 InitContact( )初始化通讯录函数2.3.2 AddContact( )添加联系人和CheckCapaticy( )检查容量函数2.3.3、ShowContact( )显…

项目架构落地之需求分析(一)

目标 尽可能全面准确、全面、深入理解业务&#xff08;5W2H&#xff09;识别重难点业务理清业务流程和功能点识别非功能需求和质量约束 一.需求调研 派什么人&#xff1a; 懂业务头脑灵活懂技术擅长沟通业务经验多情商高 调研之前&#xff1a; 做功课假想系统 调研中&am…

常用Web安全扫描工具汇整

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。 1、AWVS Acunetix Web Vulnerability Scanner&a…

数据库Redis(一):基础知识

NoSQL数据库简介 NoSQL&#xff0c;Not only SQL&#xff0c;泛指非关系型的数据库&#xff0c;不依赖业务逻辑方式存储&#xff0c;而以简单的 key-value 模式存储&#xff0c;极大地增加了数据库的扩展能力。 1&#xff09;不遵循SQL标准&#xff1b; 2&#xff09;不支持A…

图书推荐管理系统Python+Django网页界面+协同过滤推荐算法

一、介绍 图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构&#xff0c;后端采用Django作为逻辑处理&#xff0c;通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有&#…

安全、高效远程访问大数据分析平台解决方法:Splunk Enterprise+Cpolar

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 Splunk Enterprise是一个强大的机器数据管理平台&#xff0c;可帮助客户分析和搜索数据&#xff0c;以及可视化数据…

iPhone开发--Xcode15下载iOS 17.0.1 Simulator Runtime失败解决方案

爆句粗口&#xff0c;升级后公司网络下载iOS 17.0.1 Simulator Runtime一直出错&#xff0c;每次出错后都得重新开始下载&#xff0c;oh&#xff0c;f**k。上一次在在家里的网络升级成功。 解决办法一&#xff1a; 进入网址&#xff1a;https://developer.apple.com/download…

QMap之自定义Key和Value

为什么要自定义QMap的 key和value呢?因为在某些应用场景,基本数据类型的key和value并不能满足要求,比如座位在第几行、第几列,座位上人的姓名、职务;二维坐标系中散点的横坐标、纵坐标,散点的id、result。即key和value是一种多对多的关系。 #include <QMap> #incl…

税务某局 webpack 登录接口逆向分析

持续创作文章&#xff0c;只是为了更好的思考 这里不多介绍了&#xff0c;我放一张图大家就明白是什么接口了。这里只介绍整体加密逻辑&#xff0c;有些细的地方大家自行调整。 本次逆向的网址是 aHR0cHM6Ly90cGFzcy5qaWxpbi5jaGluYXRheC5nb3YuY246ODQ0My8jL2xvZ2luP3JlZGly…

罗马数字转整数[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 罗马数字包含以下七种字符:I&#xff0c;V&#xff0c;X&#xff0c;L&#xff0c;C&#xff0c;D和M。 字符数值I1V5X10L50C100D500M1000 例如&#xff1a;罗马数字2写做II&#xff0c;即为两个并列的1。12写做XII&#xff0c;即为…

Python使用正则表达式去除base64编码前缀

Python使用正则表达式去除base64编码前缀 当我们做开发时&#xff0c;前端有可能会传给我我们base64编码字符串&#xff0c;如果我们想把它转成文件&#xff0c;需要去除前缀&#xff0c;代码如下&#xff1a; import rebase64_str "data:zip/png;base64,AAAAAAAAAAAAB…

今天是1024节日,作为一个程序员,我想表达我对Java和詹姆斯·高斯林(James Gosling)的感激之情

今天是1024节日 我感谢Java感谢詹姆斯高斯林 今天是1024节日&#xff0c;作为一个程序员&#xff0c;我想表达我对Java和詹姆斯高斯林&#xff08;James Gosling&#xff09;的感激之情。Java是一门伟大的编程语言&#xff0c;而詹姆斯高斯林是它的创造者之一。 首先&#xf…

FPGA的256点FFT调用Quartus IP核实现VHDL傅里叶变换

名称&#xff1a;256点FFT调用Quartus IP核实现傅里叶变换 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a;使用VHDL实现256点FFT&#xff0c;调用Quartus IP核实现傅里叶变换 演示视频&#xff1a;http://www.hdlcode.com/index.php?mhome&cView…