2024年150道高频Java面试题(八)

15. 什么是 Java 中的注解?它有哪些用途?

Java 中的注解(Annotation)是一种用于为代码添加元数据的机制。简而言之,注解是提供给编译器或运行时环境的信息,用来解释或说明代码的某些方面。注解不会改变代码本身的执行逻辑,但它们可以用来生成额外的文件、代码或提供某种形式的运行时信息。

注解主要用途如下:

  1. 代码生成:通过注解,可以在编译时生成代码。例如,使用 @Override 注解可以告诉编译器该方法意在覆盖父类中的方法,如果父类中没有这个方法,编译器就会报错。
  2. 编译时检查:注解可以帮助编译器检查代码错误或规范代码行为。如 @Deprecated 表示某个元素(类、方法等)已不再推荐使用,编译器可能会给出警告。
  3. 运行时反射:注解可以在运行时通过反射机制读取,以改变或增强程序的行为。例如,框架如 Spring 和 Hibernate 使用注解来自动配置对象和管理对象之间的关系。

以下是几种常见的注解及其用途:

  • @Override:标识一个方法声明意图重写父类中的方法。
  • @Deprecated:表示元素已经不再推荐使用,可能在未来版本中被移除。
  • @SuppressWarnings:告诉编译器忽略特定的警告信息。
  • @SafeVarargs:用在方法或构造函数上,断言包含泛型变量的参数不会执行不安全的操作。
  • @FunctionalInterface:表明接口声明意图作为函数式接口。

除此之外,还有自定义注解(用户自定义的注解):

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 定义一个注解
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可见
@Target(ElementType.METHOD) // 可以用于标注方法
public @interface MyCustomAnnotation {String value() default ""; // 注解的属性int count() default 0; // 注解的属性
}

自定义注解可以有以下用途:

  • 配置管理:可以通过注解来配置应用程序的某些行为,简化配置过程。
  • 测试:JUnit 使用注解来标记测试方法,如 @Test
  • 依赖注入:Spring 等框架使用注解来自动装配对象。
  • 事务管理:在需要事务管理的方法上使用注解来声明事务属性。

总之,注解为Java开发者提供了一种强大且灵活的代码元数据描述方式,有助于简化代码,提高开发效率,并且可以用于多种不同的编程场景。

16. Java 中的枚举类型有哪些特性?

Java 中的枚举(Enum)类型提供了一种用于定义一组命名的常量以及与这些常量相关联的方法和字段的方式。以下是Java枚举类型的一些特性:

  1. 类型安全:枚举确保变量只能被赋予那些明确定义的值。这使得代码更加健壮,减少了因传入无效值而引发的错误。
  2. 不可变性:枚举是不可变的,意味着一旦创建,就不能再添加或删除任何枚举常量。
  3. 预设方法:每个枚举都自动继承自java.lang.Enum类,因此每个枚举都有一些预设方法,如name()ordinal()values()valueOf()等。
    • name():返回枚举常量的名称。
    • ordinal():返回枚举常量的序号,从0开始。
    • values():返回一个包含所有枚举常量的数组。
    • valueOf(String name):返回具有指定名称的枚举常量。
  4. 可以自定义方法与字段:枚举可以有字段、构造函数以及普通方法和抽象方法,这允许为每个枚举常量存储额外的信息或定义特定的行为。
  5. 可以覆盖方法:虽然枚举不能继承其他类,但它们可以覆盖Enum类中的方法。
  6. 实现了Comparable接口:枚举预设实现了Comparable接口,因此它们可以相互比较。
  7. 序列化:所有的枚举都是可序列化的,它们默认有一个静态的final字段,因此不需要显式声明。
  8. 可以使用接口:虽然枚举不能继承其他类,但它们可以实现接口,这允许枚举具有多态的特性。

下面是一个简单的枚举类型示例:

public enum Direction {NORTH, SOUTH, EAST, WEST;// 自定义字段private final int index;// 构造函数Direction() {this.index = ordinal();}// 自定义方法public int getIndex() {return index;}
}

在这个例子中,我们定义了一个名为Direction的枚举,它有四个预定义的常量。我们还为每个枚举常量添加了一个字段index并提供了访问该字段的方法。

这些特性使得枚举在Java中成为表示一组固定常量的首选方法。

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

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

相关文章

比torchvision更强大,从timm库引用预训练模型和本地加载的方法

1,介绍 torchvision是大家最常用的预训练模型来源,但是其包含的预训练模型种类很少,往往并不能满足研究者们的需求。 而timm库提供了一个更强大的替代选项。 利用如下代码查询 import timmprint(len(timm.list_models())) 输出 1032 可…

c++编译出来的程序a,当在linux 系统终端执行./a 发生了哪些事情?

路径解析: 用户输入 ./a 并按下回车。终端中的 shell(如 bash、zsh 等)开始解析这个命令,确认 a 是一个可执行文件并且存在于当前目录中。权限检查: Shell 检查 a 文件是否具有执行权限。如果没有执行权限,…

FastAPI+React全栈开发14 FastAPI如何开发REST接口

Chapter03 Getting Started with FastAPI 14 How does FastAPI speak REST FastAPIReact全栈开发14 FastAPI如何开发REST接口 Let’s create a minial FastAPI application, a classic Hello World example, and start examining how FastAPI structures the endpoints. I u…

Android Studio 2023.2.1版本 kotlin编译报错踩坑

1、需求 由于最近在整理项目,做一些公共基础组件Maven仓库封装,由于之前项目jar包和kotlin版本很老,kotlin版本1.3.72版本 Gradle使用5.4.1 Android Studio版本是2023.2.1,分别依次顺序如下图所示。 如下图所示 2、分析编译报错…

如何利用大模型LLM辅助,使用Python完成将CSV快速导入MySQL数据库

目录 一、适合场景 二、开发过程说明 三、功能使用流程 四、代码 1、安装python依赖库 2、完整代码段 一、适合场景 无废话,CSV中有少量不合规数据需要手工处理可利用此方法,适合有点经验的程序员,可以不熟Python,思路还是要…

第三十七章 管理和监控Web网关 - Web 网关缓存表

文章目录 第三十七章 管理和监控Web网关 - Web 网关缓存表Web 网关缓存表手动关闭连接清除缓存测试服务器连接 第三十七章 管理和监控Web网关 - Web 网关缓存表 Web 网关缓存表 第四个状态表列出了 Web Gateway 响应缓存中保存的表单。 Cached Forms - 缓存表单的名称&#x…

图像旋转算法双线性插值法详解

双线性插值法是一种常用的插值算法,用于在图像旋转、缩放等操作中估计目标像素的灰度值。它基于近邻像素之间的灰度变化趋势进行推断,从而提供更平滑和精确的结果。 双线性插值算法的基本思想如下: 首先,根据旋转角度确定旋转中心…

vue2完结

笔记 关于不同版本的Vue: 1.vue.js与vue.runtime.xxx.js的区别:(1)vue.js是完整版的Vue,包含:核心功能模板解析器(2)vue.runtime.xxx.js是运行版本的Vue,只包含核心功能,没有模板解析器 2.因为…

docker快速安装单节点和多点MongoDB副本集

文章目录 概要一、单节点副本集二、多节点副本集三、参考 概要 最近项目的MongoDB版本终于升级到了MongoDB4.4了,可以使用使用事务了,但MongoDB的不支持单节点事务,至少是副本集。 测试环境没必要搭建复杂的副本集,还好官方给出了…

【动手学深度学习-pytorch】-9.3深度循环神经网络

到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对一个单层来说,这可能具有…

量化交易入门(二十七)回撤、收益率、夏普比率

回撤 一、回撤的定义与计算 回撤是指投资组合或交易账户从历史最高点下跌到后来最低点的幅度,通常用百分比表示。计算公式为: 回撤 (历史最高净值 - 当前净值) / 历史最高净值 100% 例如,某策略历史最高净值为150万,当前净值跌到了100万,则回撤为:(150-100)/150100%33.33%…

synchronized 和 ReentrantLock 的区别是什么

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:synchronized 和 ReentrantLock 的区别是什么 1. 获取锁的方式 synchronized:synchronized的锁获取是隐式的。当线程进入synchronized修饰的代码…

探索SOCKS5代理、代理IP与跨界电商、游戏技术的网络安全实践

介绍数字时代跨境业务的兴起,特别是跨界电商和全球游戏市场的扩张。 简述网络安全在支持跨境业务扩展中的核心作用,特别是SOCKS5代理和代理IP技术的重要性。 第一章:出海业务概述 跨界电商与全球化挑战:介绍跨界电商的基本模式&am…

Oracle 19C RAC集群补丁升级

文章目录 一、补丁包概述二、OPatch检查和更新Grid用户更新OPatchOracle用户更新OPatch 三、验证Oracle Inventory的有效性四、运行 OPatch 冲突检查五、运行opatch命令检查GI HOME下是否有足够的空间六、补丁冲突检测与解决(修补程序)七、使用root用户应…

Linux - 第三节

改变用户类型 su 仅单纯的进行身份变化 依旧处于普通用户里面 su - 进行重新登录更改身份 退出用exit / ctrld su 用户名 改成成其他身份 对一条命令进行提权 sudo command r:可读 w:可写 x:可执行 -:对应的权限位置,没有权限 去掉所有权限 chmod u…

MongoDB聚合运算符:$linearFill

文章目录 MongoDB聚合运算符:$linearFill语法使用对比$fill和$linearFill 举例使用线性插值填充缺失值在单个阶段中使用多种填充方法 MongoDB聚合运算符:$linearFill $linearFill聚合运算符在一个窗口中基于附近字段的值使用线性插值填充null和缺失字段…

Kafka开机自启脚本

1.虚拟机编辑定时任务 crontab -e reboot /usr/local/startShell.sh 2.编辑自定义启动脚本 #!/bin/sh# 进入kafka安装目录 cd /usr/local/kafka_2.12-3.7.0# 初始化java变量 export JAVA_HOME/usr/local/jdk1.8.0_401 export JRE_HOME${JAVA_HOME}/jre export PATH$PATH:${J…

多视图三维重建-SFM简介

背景 掌握传统的多视图三维重建基本流程 总体流程 多视图三维重建的Pipieline如下图,总共分为四个步骤: 拍摄场景多视角的图像建立这些图像之间的联系(Data Association)SFM稀疏重建MVS稠密重建 Data Association 建立图像…

向开发板上移植ip工具:将ip工具移植到开发板系统中

一. 简介 前面一篇文章对 ip工具源码进行了交叉编译,生成了ip工具。文章如下: 向开发板上移植ip工具:交叉编译 ip工具-CSDN博客 本文对生成的 ip工具进行移植,即移植到开发板系统中,并确定是否可用。 二. 向开发板…

Nagios工具

一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员,在状态恢复后…