Java基础面试题——异常

目录


关系图

1. Throwable和Exception之间的关系

2.异常分为哪两大类

3.常见的 RuntimeException

4. 常见的 Error

5.什么是已检查异常和未检查异常?它们的区别是什么?

6.Java 中如何自定义异常?

7.throw 和 throws 的区别是什么?

8.什么是 finally 块?在什么情况下 finally 块不会被执行? 


关系图

1. Throwable和Exception之间的关系

Throwable 是所有异常和错误的基类,它有两个直接子类:ExceptionErrorException 表示程序运行时可以捕获和处理的异常,而 Error 则表示更严重的系统错误,通常无法恢复。

Exception 下的子类进一步分为已检查异常和未检查异常。已检查异常必须在编译时进行处理,而未检查异常(即 RuntimeException 及其子类)则是运行时异常,通常代表编程中的错误,编译器不强制处理。

2.异常分为哪两大类

已检查异常(Checked Exception)属于继承自 Exception,但不包括继承自 RuntimeException 的异常。这类异常在编译时会被检查,要求必须通过 try-catchthrows 来处理。常见的已检查异常有 IOExceptionSQLExceptionFileNotFoundException 等。这些异常通常表示外部环境或资源的问题,如文件未找到、网络连接失败等。

未检查异常(Unchecked Exception)包括 RuntimeExceptionError,编译器不会强制要求处理。它们通常代表编程中的逻辑错误或系统级问题。常见的未检查异常有 NullPointerExceptionArrayIndexOutOfBoundsExceptionIllegalArgumentException 等。

3.常见的 RuntimeException

NullPointerException:当程序试图访问 null 对象时发生。

ArrayIndexOutOfBoundsException:当数组访问越界时发生。

ArithmeticException:当出现算术错误(如除以零)时抛出。

ClassCastException:当试图将对象转换为不兼容的类型时抛出。

IllegalArgumentException:当传递给方法的参数不合法时抛出。

IllegalStateException:当对象的状态不适合调用某方法时抛出。

NumberFormatException:当无法将字符串转换为数值类型时抛出。

4. 常见的 Error

Error 通常由 JVM 抛出,表示系统级别的严重错误。常见的有:

OutOfMemoryError:当 JVM 无法分配足够的内存时抛出。

StackOverflowError:当递归调用过深导致栈内存溢出时抛出。

VirtualMachineError:JVM 内部出现无法恢复的错误时抛出。

NoClassDefFoundError:当 JVM 运行时找不到类定义时抛出。

5.什么是已检查异常和未检查异常?它们的区别是什么?

已检查异常(Checked Exception)是在编译时被检查的异常,意味着编译器要求必须处理它们(使用 try-catch 或 throws 声明)。常见的已检查异常包括 IOExceptionSQLException 等。这类异常通常是程序无法控制的外部情况(例如文件读取失败或数据库连接失败)。

未检查异常(Unchecked Exception)包括 RuntimeException 及其子类,编译器不强制要求处理它们。这类异常通常是程序中的逻辑错误或意外情况,例如 NullPointerExceptionArrayIndexOutOfBoundsException 等。它们发生在运行时,通常可以通过修复代码来避免。

区别

        已检查异常:编译时必须处理,外部情况导致。

        未检查异常:编译时不强制处理,通常是程序中的逻辑错误。

6.Java 中如何自定义异常?

Java 支持自定义异常类,可以通过继承 Exception(用于已检查异常)或 RuntimeException(用于未检查异常)来创建自己的异常类。

7.throw 和 throws 的区别是什么?

throw

  throw 关键字 用于显式地抛出一个异常。

        可以抛出任何 Throwable 类型的对象(包括 Exception 和 Error)。

        通常在方法体或代码块内部使用,当某种条件不满足时,手动抛出异常。

throws

  throws 关键字 用于声明一个方法可能抛出的异常类型。

        它位于方法签名中,告诉调用者该方法可能抛出某种类型的异常,调用者必须处理这个异常(通过 try-catch 块,或者继续使用 throws 抛出)。

        常用于处理 已检查异常,如 IOException 或 SQLException

8.什么是 finally 块?在什么情况下 finally 块不会被执行? 

finally 块是 Java 异常处理结构的一部分,通常与 trycatch 一起使用。它的作用是确保不论是否发生异常,finally 块中的代码都会执行(例如,释放资源、关闭文件等)。

但在少数情况下,finally 块不会执行

  1. 如果在 try 或 catch 块中调用了 System.exit()
  2. 如果线程被中断或杀死(例如 JVM 崩溃)。
  3. 如果在 finally 之前的代码块中发生了非捕获的致命错误,如硬件故障。

System.exit() 是 Java 中用于终止当前 Java 虚拟机(JVM)运行的静态方法。调用这个方法会立即停止程序的执行,并终止所有正在运行的线程。 

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

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

相关文章

ubuntu18.04升级到20.04

要将 Ubuntu 18.04 升级到 Ubuntu 20.04,你可以按照以下步骤进行操作。升级操作会涉及到系统的核心部分,建议在升级之前备份重要数据。 1. 备份数据 在进行系统升级之前,请确保备份重要的数据。可以使用 rsync、tar、或者系统备份工具来创建…

GlusterFS 分布式文件系统

一、GlusterFS 概述 1.1 什么是GlusterFS GlusterFS 是一个开源的分布式文件系统,它可以将多个存储服务器结合在一起,创建一个大的存储池,供客户端使用。它不需要单独的元数据服务器,这样可以提高系统的性能和可靠性。由于没有…

视频转文字工具:开启视频内容深度挖掘的钥匙

图片里到文字要提取出来,现在有很多的工具,但是视频里的文字要提取出来,是不是就不那么好操作呢?并不是的,现在也有不少支持视频转文字的工具,这次我们就来介绍一些可以提高我们视频文字提取效率的工具吧。…

速盾:凡科建站开cdn了吗?

凡科建站是一家专业的建站平台,提供了多种功能和工具来帮助用户快速搭建自己的网站。随着互联网技术的不断发展,网站的访问速度和稳定性成为了越来越重要的考虑因素。为了优化用户体验,提高网站的加载速度,凡科建站已经开启了CDN&…

经典sql题(八)SQL 查询详细指南总结一

SQL 查询详细指南 SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言。本文将详细介绍 SQL 中的一些常见操作及其用法,包括 DISTINCT 去重、LIMIT 限制、排序、开窗函数、NULL 值替换、JOIN 与 UNION 等。 1. DISTI…

大话Python|基础语法(上)

一、单行注释 以下代码输出一个Hello World!字符串 在Python代码中,注释会自动被Python解析器忽略 print(Hello World) 二、多行注释 在Python代码中,注释一共有两种形式; 1、单行注释:注释的内容只有一行 2、多行…

计算机网络笔记001

讲义 1.计算机网络的定义  定义: 一批独立自治的计算机系统的互连集合体  说明: 独立自治的计算机系统, 互连的手段是各种各样的, 依据协议进行 工作  2.计算机网络和通信网络  通信网络: 重点研究通…

element plus 按需导入vue

步骤一: 下载element plus 在打开vue项目的编辑器中打开终端,或者在cmd窗口进入到项目目录下 用你的包管理器安装element plus,例如使用npm包管理器: npm install element-plus --save 查看是否安装成功:查看项目文件package…

PostgreSQL(PG)(二十二)

🌻🌻 目录 🌻🌻 一、PostgreSQL 简介1.1、PG 的历史1.2、PG的社区1.2.1 纯社区1.2.2 完善的组织结构1.2.3 开源许可独特性 1.3 、PostgreSQL与MySQL的比较 二、PostgresQL的下载安装2.1、Windows上安装 PostgreSQL2.2、远程 连接 …

RK3568部署DOCKER启动服务器失败解决办法

按照上文的方法部署完DOCKER之后,启动服务异常,查阅网络相关资源,解决方案如下: 修改/源码/kernel/arch/arm64/configs/OK3568-C-linux_defconfig,在最后添加 CONFIG_MEMCGy CONFIG_VETHy CONFIG_BRIDGEy CONFIG_BRID…

php怎么连接使用kafka

PHP 连接并使用 Kafka 需要借助 Kafka 的 PHP 客户端库,比如流行的 php-rdkafka 扩展。它是基于 C 语言的 librdkafka 库的 PHP 绑定,功能稳定且性能高。下面是如何使用 php-rdkafka 来连接和使用 Kafka 的步骤。 1. 安装 php-rdkafka 1.1 安装依赖 首…

GS-SLAM论文阅读笔记--TAMBRIDGE

前言 本文提出了一个自己的分类方法,传统的视觉SLAM通常使用以帧为中心的跟踪方法,但是3DGS作为一种高效的地图表达方法好像更侧重于地图的创建。这两种方法都有各自的优缺点,但是如果能取长补短,互相结合,那么就会是…

6.7泊松噪声

基础概念 在OpenCV联合C中给一张图片添加泊松噪声(Poisson Noise)可以通过生成随机数并在图像的每个像素上加上这些随机数来实现。泊松噪声是一种统计分布服从泊松分布的噪声,通常用于模拟光子计数等场景。 使用泊松噪声的场景 泊松噪声通…

【解决】chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标

chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标 今天打开电脑的时候,网页中任何文本的地方,只要鼠标点击,就会出现一个输入的光标,无论在哪个站点哪个页面都是如此。 我知道…

Pandas 数据分析入门详解

今日内容大纲介绍 DataFrame读写文件 DataFrame加载部分数据 DataFrame分组聚合计算 DataFrame常用排序方式 1.DataFrame-保存数据到文件 格式 df对象.to_数据格式(路径) ​ # 例如: df.to_csv(data/abc.csv) 代码演示 如要保存的对象是计算的中间结果,或者以…

CQRS模型解析

简介 CQRS中文意思为命令于查询职责分离,我们可以将其了解成读写分离的思想。分为两个部分 业务侧和数据侧,业务侧主要执行的就是数据的写操作,而数据侧主要执行的就是数据的读操作。当然两侧的数据库可以是不同的。目前最为常用的CQRS思想方…

C++调用C# DLL之踩坑记录

C是非托管代码,C#则是托管代码,无法直接调用 CLR的介绍见CLR简介 MSDN提到了两种非托管-托管的交互技术:CLR Interop和COM Interop 后者要将C# 类库注册为COM组件,本文只探讨CLR,要通过C CLR写中间层代码 方式一&…

javascript 浏览器打印不同页面设置方向,横向纵向打印

// 在JavaScript中添加打印样式 const printStyle document.createElement(style); printStyle.innerHTML media print { page { size: landscape; }body { margin: 10mm; } }; document.head.appendChild(printStyle);// 触发打印 function printPage() {window.print(); }/…

获取参数

获取querystring参数 querystring 指的是URL中 ? 后面携带的参数,例如:http://127.0.0.1:9090/web?query杨超越。 获取请求的querystring参数的方法如下: 方法1: Query package main// querystringimport ("github.com/…

第6章 右值引用

6.1 左值和右值 区分左值与右值: 看能不能取地址 & 若能取地址则为左值 不能取地址为右值 int x 1; x;//这个是右值 x;//左值 x实现 int tmp x; x x1; return tmp; 返回临时的主要字符串也是左值 它可以取地址 6.2 左值引用 当我们需要将一个对象作为参数…