当前位置: 首页 > news >正文

JavaSE---异常的经典面试题

1.throw和throws的区别

在Java中throw和throws都是用来捕获异常的两个关键字。

首先,它们在使用的位置上不同,throw出现在代码块,throw关键字允许程序员根据自己的代码逻辑去抛出异常对象或者一些自定义的异常对象,而throws关键字出现在函数头,throws后面跟的是异常类型,方法内部如果出现了多个异常,throws后面必须跟多个异常类型,之间用逗号隔开

其次就是异常的出现这方面的不同,throw关键字是根据代码逻辑去预判一些异常的出现并主动去抛出这些异常,也就是说如果执行了throw就表示代码中就一定出现了这些异常,而throws关键字只是表示了这种异常出现的可能性,代码中不一定会出现这种异常

最终就是throw和throws都是一种消极的处理异常的方式,因为throw和throws是抛出异常或者可能抛出异常,都是交给方法的调用者去处理异常的

2.finally中的语句一定执行吗?

首先,使用finally关键字是为了保证程序正常或者异常退出时,实现对一些必要资源的回收,因为finally的执行时机是在方法返回之前,如果出现一些类似于死循环等等的情况,就会导致finally中的语句无法执行。

第一个情况就是try代码快中出现了死循环或者死锁的情况,就会导致程序阻塞在死循环或者死锁的那个地方,从而导致finally中的语句无法执行

第二个情况就是如果在try代码快中调用的System.exit()方法,正常情况下,当try或者catch执行完毕之后,JVM会继续执行finally代码快,但是调用的System.exit()方法之后,就会强制终止JVM,这样就会导致finally中的语句无法执行

第三个情况就是关于守护线程的情况,我们知道非守护线程会阻止JVM的退出,而对于守护线程来说,如果非守护线程结束了,即使守护线程还没有运行完毕,由于非守护线程结束,所有的守护线程都会被强制借宿,此时如果try-catch-finally代码快中处于这些守护线程中,自然而然finally代码块的语句就不会执行了

以上就是我们想的到的关于finally中语句无法执行的一些情况了

3.Error和Exception有什么区别

Error和Exception都是Throwable的子类

Error指的是JVM无法解决的严重问题,这些问题通常是程序无法处理或恢复的,比如栈溢出和内存耗尽

Exception是指程序运行时可能出现的可处理的一些异常情况,这些异常情况可以通过完善代码的逻辑来解决

http://www.dtcms.com/a/319007.html

相关文章:

  • 《C语言》函数练习题--1
  • FreeRTROS3——事件组和定时器
  • QT的拖拽功能
  • Flutter开发 Slider组件(如音量控制)
  • 小程序省市级联组件使用
  • 【课题推荐】卡尔曼滤波,创新性的算法与应用:从非线性适用性、鲁棒抗差、自适应、金融与生物新应用等方面考虑
  • 项目构想|文生图小程序
  • idea开发工具中git如何忽略编译文件build、gradle的文件?
  • C5.1:共发射极组态
  • 【Day 18】Linux-DNS解析
  • 如何理解“信号集是位掩码,每个bit代表一个信号”这句话?
  • 怎么在本地引入字体
  • 构建在 OpenTelemetry eBPF 基础之上:详解 Grafana Beyla 2.5 新特性
  • 防火墙环境下的全网服务器数据自动化备份平台搭建:基于 rsync 的完整实施指南
  • CentOS 7 下通过 Anaconda3 运行llm大模型、deepseek大模型的完整指南
  • Express框架
  • 【JavaEE】(9) JVM
  • ElementUI之表格
  • 企业家 IP 发展态势剖析|创客匠人
  • 计算机网络1-5:计算机网络的性能指标
  • 【python 数据加密AES-GCM + 时间戳签名方案(带时间校验)】
  • vue3 el-select 加载触发
  • tcpdump问题记录
  • 软件运行时 ffmpeg.dll 丢失怎么办?从原因排查到完美修复的完整方案
  • 【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理
  • 什么是 TcpCommunicationSpi
  • HTML已死,HTML万岁——重新思考DOM的底层设计理念
  • 【音视频】WebRTC C++ native 编译
  • SpringAI动态调整大模型平台
  • 数据结构----栈和队列认识