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.rhkb.cn/news/429948.html

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

相关文章

简述混沌神经网络

混沌神经网络是一种结合了神经网络与混沌理论的新型智能信息处理系统。以下是对混沌神经网络的详细解析: 一、定义与背景 混沌神经网络是由于神经网络具有高度非线性动力学系统的特性,而混沌又具有无规则性、遍历性、随机性等特点,因此神经网…

端侧 AI 的新突破:面壁智能 MiniCPM 3.0

在人工智能领域,每一次技术的革新都可能引发一场小小的革命。 ChatGPT-3.5 曾经凭借其惊人的表现赢得了大众的关注,但如今,随着国内AI公司面壁智能推出的新端侧基座模型,人们开始重新审视端侧AI的潜力和未来。 这款名为MiniCPM …

linux----进程地址空间

前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、空间分布 二、栈和堆的特点 (1)栈堆相对而生,堆是向上增长的,栈是向下增长的。 验证:堆是向上增长的 这里我们看到申请的堆&#xff…

Ubuntu 20.04安装pycharm2022及配置快捷方式

一、下载与安装 1. 下载 在 官网 下载所需版本,如:下载 2022.3.3 - Linux (tar.gz) 2. 安装 设置自定义安装路径(推荐在 /opt/ 路径下)并安装 mkdir -p ~/Documents/software/pycharm/ cd ~/Documents/software/pycharm/ mv ~/Downloads/pycharm-c…

解决 TortoiseGitPlink Fatal Error:深入解析

解决 TortoiseGitPlink Fatal Error:深入解析 在 Windows 平台上,开发者使用 Git 和 TortoiseGit 进行版本控制时,有时会遇到 TortoiseGitPlink Fatal Error。该错误通常是在推送/拉取代码时,客户端未能提供正确的 SSH 密钥。 1…

单相电多相电

目录 1. 单相电 2. 多相电 3. 其他多相电系统 单相电和多相电是电力系统中常见的两种供电方式,主要区别在于电力传输的相数。以下分别介绍它们的基本概念、特征、以及应用场景。 1. 单相电 定义: 单相电指的是只有一根火线和一根零线的电力系统。这…

企业微信应用消息收发实施记录

一、前置配置 1.1 进入我的企业页面,记录下企业ID。 1.2 创建企微应用,记录下应用的 AgentId 和 Secret。 1.3 设置应用的企业可信IP,将服务器公网 IP 填入即可。 1.4 设置应用接收消息API 填入服务器 API 地址,并记录下随机获取…

JAVA精准匹配同城找搭子交友系统小程序源码

精准匹配,同城找搭子交友系统 🔍 开篇:告别盲目,迎接精准交友新时代 在这个快节奏的城市生活中,你是否厌倦了无效的社交和孤独的夜晚?是时候告别那些盲目的交友尝试,迎接“精准匹配同城找搭子…

SpringBoot启动横幅输出到控制台。

在Spring Boot应用中,banner.txt 文件通常放置在项目的资源目录下(通常是 src/main/resources),当Spring Boot应用启动时,会自动读取这个文件并将其内容作为启动横幅输出到控制台。这可以用来个性化你的应用程序启动时…

docker|Oracle数据库|docker快速部署Oracle11g和数据库的持久化(可用于生产环境)

一、 容器数据持久化的概念 docker做为容器化的领先技术,现在广泛应用于各个平台中,但不知道什么时候有一个说法是docker并不适用容器化数据库,说容器化的数据库性能不稳定,其实,这个说法主要是因为对docker的数据持…

路径处理 | 关键点提取之Douglas–Peucker算法(附ROS C++/Python实现)

目录 0 专栏介绍1 路径关键点提取2 道格拉斯-普克算法Douglas–Peucker3 算法实现与可视化3.1 ROS C仿真3.2 Python仿真 0 专栏介绍 🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划算法轨迹优化实战,包括:…

MateBook 16s 2023在Deepin下开启性能模式,调节风扇转速到最大,全网首发!

方法 在Deepin下按住Fnp快捷键,开启性能模式。 验证 首先去debian下载acpi-call-dkms https://packages.debian.org/sid/all/acpi-call-dkms/download 然后使用root用户执行: apt install --simulate ./acpi-call-dkms_1.2.2-2.1_all.deb apt inst…

数据结构(7.3_4)——红黑树的定义和性质

红黑树和平衡排序二叉树的查插删时间 平衡二叉树的适用场景&#xff1a;适用以查为主、很少插入/删除vd场景 红黑树&#xff1a;适用于频繁插入、删除的场景&#xff0c;实用性更强 红黑树的考点 红黑树的定义&#xff1a; 红黑树的二叉排序树&#xff1a;左子树结点值<…

Day04_JVM实战

文章目录 一、gc日志和dump快照GC日志是什么,要怎么看?dump快照是什么?要怎么看?二、gc日志和dump快照实战java.lang.OutOfMemoryError:Java heap space1、gc.log怎么看2、heapdump.hprof怎么看?①jvisualvm查看②使用MAT查看java.lang.OutOfMemoryError:Metaspace1、实时…

hive-拉链表

目录 拉链表概述缓慢变化维拉链表定义 拉链表的实现常规拉链表历史数据每日新增数据历史数据与新增数据的合并 分区拉链表 拉链表概述 缓慢变化维 通常我们用一张维度表来维护维度信息&#xff0c;比如用户手机号码信息。然而随着时间的变化&#xff0c;某些用户信息会发生改…

[OPEN SQL] SELECT语句

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 1.SELECT语句 SELECT语句从数据库表中读取必要的数据 1.1 读取一行数据 语法格式 SELECT SINGLE <cols>... WHERE cols&#xff1a;数据库表的字段 从数据库表中读取一条数据可使…

ETLCloud:新一代ETL数据抽取工具的定义与革新

数据集成、数据治理已经成为推动企业数字化转型的核心动力&#xff0c;现在的企业比任何时候都需要一个更为强大的新一代数据集成工具来处理、整合并转化多种数据源。 而ETL&#xff08;数据提取、转换、加载&#xff09;作为数据管理的关键步骤&#xff0c;已在企业数据架构中…

SMS over IP原理

目录 1. 短消息业务的实现方式 2. 传统 CS 短消息业务中的发送与送达报告 3. MAP/CAP 信令常见消息 4. SMS over IP 特点概述 5. SMS over IP 中的主要流程 5.1 短消息注册流程(NR 或 LTE 接入) 5.2 短消息发送(MO)流程(NR 或 LTE 接入) 5.3 短消息接收(MT)流程(NR 或…

如何在磁盘清理后恢复误删除的照片

如果您在运行磁盘清理后丢失了照片&#xff0c;请不要担心&#xff0c;我们会为您提供支持。这篇文章解释了如何在 奇客数据恢复软件的帮助下运行磁盘清理实用程序后恢复丢失或删除的照片。 每个人一生中都会成为意外删除重要照片、视频或音频文件的受害者。令人惊讶的是&…

【线程】线程的控制

本文重点&#xff1a;理解线程控制的接口 前言 内核中是没有很明确线程的概念的&#xff0c;只有轻量级进程的概念&#xff0c;不会提供直接给我们线程的系统调用&#xff0c;而会给我们提供轻量级进程的系统调用。我们用户是需要线程的接口的&#xff0c;在应用层&#xff0…