Java基础面试题——异常

news2024/11/14 20:22:55

目录


关系图

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.coloradmin.cn/o/2156656.html

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

相关文章

ML 系列:机器学习和深度学习的深层次总结(07)数据预处理—解决缺失值、异常值和错误数据

文章目录 一、说明二、数据预处理三、缺失值四、数据集中可能会出现多种类型的缺失值:五、处理缺失值的方法六、结论 一、说明 在AI数据挖掘中,对原始数据的预处理是必须的技术手段,本篇将对数据预处理的一系列注意事项进行展示。 二、数据…

JavaEE: 深入探索TCP网络编程的奇妙世界(五)

文章目录 TCP核心机制TCP核心机制六: 拥塞控制为什么要有拥塞控制?动态调整的拥塞控制拥塞控制中,窗口大小具体的变化过程 TCP核心机制七: 延时应答TCP核心机制八: 捎带应答 TCP核心机制 前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(四) 书接上文~ TCP核心机制六: 拥…

数据结构:二叉树OJ题(基础版)

前言 更完两期二叉树的知识之后,来做几道oj题巩固一下基础 一、翻转二叉树 链接:leetcode链接 还是分治思想,将问题分解成左子树和右子树交换,遇到空树停止 采用递归算法做题 TreeNode* invertTree(TreeNode* root) {if(root …

2D目标检测常用loss

在2D目标检测任务中,常用的损失函数(Loss)主要用于优化以下三个关键方面: 类别分类(Classification):用于区分检测到的对象属于哪一类。边界框回归(Bounding Box Regression&#x…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 蜗牛兼职网结构图,如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

在Web开发中使用和风天气接口

介绍 和风天气是一个提供全球天气预报和气象数据的服务平台,支持多种语言,提供实时天气、未来天气预报、空气质量指数、生活建议等多种气象数据,可以广泛用于网页开发、移动应用和物联网设备等场景。 开发文档:文档 | 和风天气开…

intellij idea 控制台运行java出现中文乱码的解决方法

原因: 字符编码不一致: 当你在intellij idea使用了UTF-8编码,而在控制台使用了其他编码(比如gbk),就可能导致乱码。 文件读写编码问题: 如果读取文件时使用的编码与文件实际编码不一致&#xf…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理,和我的上一篇文章的检索方案: 将文本分割成512大小(一般对应段落大小)和128(一般对句子大小不是严格的句子长度)大小两种分别存储到索引库,再用llama_…

《深度学习》—— 卷积神经网络(CNN)的简单介绍和工作原理

文章目录 一、卷积神经网络的简单介绍二、工作原理(还未写完)1.输入层2.卷积层3.池化层4.全连接层5.输出层 一、卷积神经网络的简单介绍 基本概念 定义:卷积神经网络是一种深度学习模型,通常用于图像、视频、语音等信号数据的分类和识别任务。其核心思想…

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件,本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失(将图片上传至云端而非本地方法) 一&…

通信工程学习:什么是NFVI网络功能虚拟化基础设施层

NFVI:网络功能虚拟化基础设施层 NFVI(Network Functions Virtualization Infrastructure)即网络功能虚拟化基础设施层,是NFV(Network Functions Virtualization,网络功能虚拟化)架构中的一个重要…

精准农业中遥感技术应用(五)- 一站式遥感数据服务平台AIEarth

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

【LeetCode:116. 填充每个节点的下一个右侧节点指针 + BFS(层次遍历)】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

redis主从复制的理论和实战详细教程

0 前言 就是主从复制,master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其他的slave数据库。也就是redis主从复制异步同步数据的,所以在主从架构中使用分布式锁时,可能会出现…

4--SpringBoot项目中分类管理

目录 新增分类 分类分页查询 启用禁用分类 根据类型查询 修改分类 本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理 详解(一)-C…

基于51单片机的手环设计仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,DHT11温湿度采集温湿度,滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位,通过LCD1602显示信息,然后在程序里设置好是否…

vue3项目中引入词云图

在vue3中的项目引入词云图 前言&#xff1a;先看效果图步骤如下 前言&#xff1a; 公司产品要求项目中使用词云图&#xff0c;我算是第一次用&#xff0c;于是在网上查找资料&#xff0c;最后做出来了。 先看效果图 步骤如下 npm i echarts-wordcloud -S <template> …

恶意AI大模型的兴起将改变网络安全

LLM 的恶意版本&#xff08;如 ChatGPT 的黑暗变体&#xff09;的兴起正在通过使用更复杂和自动化的攻击来升级网络战。 这些模型可以生成令人信服的网络钓鱼电子邮件、传播虚假信息并制作有针对性的社会工程消息。 所有这些非法功能都对在线安全构成了重大威胁&#xff0c;并加…

2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)

1. TypeScript 概述 TypeScript 是由微软开发的、基于 JavaScript 的一种强类型编程语言。它是在 JavaScript 的基础上添加了静态类型检查、面向对象编程等功能的超集&#xff0c;最终会被编译为纯 JavaScript 代码。由于其扩展了 JavaScript 的功能&#xff0c;TypeScript 特…

[Redis][数据类型]详细讲解

1.Redis 特殊数据结构 1.Streams 应用场景&#xff1a;主要用为队列(阻塞队列) 2.Geospatial 应用场景&#xff1a;用来存储坐标(经纬度) 3.HyperLogLog 应用场景&#xff1a;估算集合中的元素个数注意&#xff1a; HyperLogLog不存储元素的内容&#xff0c;但是能够记录“…