Checked exception及Unchecked exception对比

news2024/11/30 0:30:57

一、异常分类

        从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Check即编译器检查程序是否已经抛出或处理了可能的异常。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。

        Throwable下面有两个子类,分别为Error和Exception,其中所有的Error类和Exception类中的RuntimeException类都属于Unchecked异常,其余都属于Checked异常。

二、处理机制

        Checked Exceptions可能会发生的地方,编译器会强制要求你要么处理这个异常(try catch块进行处理),要么在这个方法的头部声明这个方法可能会抛出一个异常,对调用这个方法的方法做一个警告,要求调用者来处理这个异常(throws声明)。

        Unchecked Exceptions可能会发生的地方,编译器无法预见,因此不要求做任何处理。

        一般来说,Checked Exceptions常常是可以捕获捕获并处理的,往往由与客户端的不正确调用引起,捕获异常并处理可以给用户提供一次改正的机会,提高程序的健壮性。例如:用户指定打开文件路径的文件并不存在,因此可以捕获这个异常,做一个提示,并让用户可以重新选择路径。Unchecked Exceptions一般捕获后没有什么价值的,其包含的Error属于系统的内部错误,是由于设备错误,物理限制,内存不足,JVM发生内部错误,不兼容等等原因导致的,因此捕获后没有什么处理价值。另一种RuntimeException则是由于程序员本身代码有错误,发生除零错误,空指针异常,数组越界等等,这种纯粹属于程序员写代码时的失误引起,需要改变程序,因此捕获的价值很低,重写代码找出bug即可。

Checked异常

        Checked异常是Exception类的子类中除去运行时异常的所有其他异常类,如IO异常,这类异常必须被捕获并进行处理否则编译就无法通过,异常被捕获之后需要进入异常处理,可以通过thorws、throw、try catch和finall来进行:

  • throws:声明本方法可能会发生xx异常;
  • throw:抛出xx异常;
  • try catch、 finally:捕获并处理异常。

Unchecked异常

        Unchecked异常包括运行时异常和Error,由于运行时异常和Error异常都是在编译阶段无法发现的,只有程序运行时才能发现的异常,所以编译器在编译时无法对其进行检查,这类异常是不需要在编译的时候用try catch、throws等机制来处理的,编译可以通过,执行时如果出现就直接导致程序失败;其中典型的运行时异常有空指针、数组访问越界等,通常是程序的逻辑错误引起的。

三、Checked exception、Unchecked exception二者对比

Checked exceptionUnchecked exception
基本区别必须被显示地捕获或者传递,否则编译无法通过异常可以不被捕获或抛出,编译器不检查
分类继承自Exception类,除了运行时异常其他的子类运行时异常及其子类,Error类
处理策略从异常发生的现场获取详细的信息,
利用 异常返回的信息来明确操作失
败的原因, 并加以合理的恢复处理
简单打印异常信息,无法再继续处理
表示代码看起来较复杂简单清晰

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

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

相关文章

封装一个丝滑的聊天框组件

需求背景 应公司业务要求,需要做个聊天机器人,要适应不同的业务场景,大概就跟淘宝客服类似,发送消息,机器人自动回复。 话不多说,直接开撸 技术栈: react(hooks写法) …

Python——列表的常用操作

1.append: cities [北京] cities.append(上海) 2.count:统计某个元素在泪飙中出现的次数 temps [to,be,or,not,to,be] print(temps.count(to)) 3.extend:将一个列表中元素追加到另外一个列表中 a [1,2,3] b [4,5,6] c a.extend(b) 4.ins…

GPU上运行基于bert的分类任务训练loss为nan

问题如下: 运行环境:GPU 1080Ti 代码流程:因为是在之前的一份情感数据集上测试通过的,所以流程整体上应该没有大的问题。 但就是loss一直为nan,也没有报错。 然后经对比测试,同样的数据,同样…

Java——红黑树

概念 红黑树也是一种二叉搜索树,但是和avl树不同,它并不是依靠平衡因子来保证树的平衡的,而是通过颜色 红黑树每个节点中会存储颜色,分为红色和黑色,通过红黑树的限制条件,可以保证从根节点出发到叶子节点…

Final、求职两头难,留学生如何摆脱焦虑?

2022不知不觉已临近尾声,期末在即,今年秋招也即将告一段落。很多同学在学业和求职两难中艰难挣扎,焦虑情绪无形中被无限放大… 你是不是也有这样的感受—看着周围的同学们,一个接一个的拿着offer发到了朋友圈里,而自己…

推荐系统学习笔记-论文研读--点击率预估中特征交互的作用

研究背景 当前点击率预估模型没有完全挖掘特征交互的潜力特征的表征学习与特征的交互存在冲突笛卡尔积的方法比当前的点击率预估模型效果都好算法模型的效率和效果的平衡阿里巴巴线上业务量级和耗时的考虑 当前模型的特征交互的相关方法 论文研究成果 这篇论文的主要贡献 强…

day20【代码随想录】二叉树的前序遍历、二叉树的中序遍历、二叉树的后序遍历

文章目录前言一、二叉树的前序遍历(力扣144)1、递归遍历2、非递归遍历二、二叉树的中序遍历(力扣94)1、递归遍历2、非递归遍历三、二叉树的后序遍历(力扣145)1、递归遍历2、非递归遍历总结前言 1、二叉树的…

十一、JavaScript——字符串

一、转义字符 字符串 在 JS中使用单引号或者双引号来表示字符串(要么全用双引号,要么全用单引号,不要混着用) 转义字符 反斜杠 \ 使用typeof检查转义字符返回的是string类型 在 JS中使用单引号或者双引号来表示…

零成本实现接口自动化测试 – Java+TestNG 测试Restful service

接口自动化测试 – JavaTestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,JavaMavenTestNG 本文主要介绍如何用Java针对Restf…

【Lilishop商城】No3-9.模块详细设计,订单模块-3(售后)的详细设计

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑,其中重点包括接口类、业务类,具体的结合源代…

Seata-TCC快速上手

原文链接 如果是小白,可以先看TCC步骤,核心思想,然后使用Seata,阅读Seata官方提供的示例代码,验证自己的猜想,再看遍TCC。 分布式事务是跨过多个数据库或者系统的事务,在电商、金融领域应用十…

[附源码]Node.js计算机毕业设计房屋租赁管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

web前端Javascript学习之了解JavaScript弹出框

在JavaScript中,可以创建对话框或弹出窗口来与用户进行交互。 JavaScript具有三种不同类型的弹出框:警告框,确认框和提示框。 一、警告框 警告框是最简单的弹出框。它使可以向用户显示一条短消息。还包括“确定”按钮,用户必须…

巧用Github Action 自动推送docker镜像,白piao github服务器资源,还省时又省力

对于个人开发者来说如果不想再自己电脑上搭建CI/DI系统(毕竟吃资源),Github Action是一个不二的选择。 本文我们来通过 Github Action 实现 SpringBoot 项目的自动编译、制作doceker镜像,最后推送到docker hub 仓库。 Github Acti…

亿华通通过上市聆讯:第三季营收降53% 净亏3457万

雷递网 雷建平 12月13日北京亿华通科技股份有限公司(简称:“亿华通”)日前通过聆讯,准备在香港上市。这之前,亿华通是2020年8月在科创板上市,发行价为76.65元,发行17,630,523股,募集…

技术分享 | 测试平台开发-前端开发之Vue.js 框架(一)

Vue.js 是一套用于构建用户界面的渐进式框架,在目前的前端开放中比较流行的前端框架。 Vue 被设计成自底向上的逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或已有项目整合。但是学习 Vue.js 需要一定的 HTML、CSS、和…

09、SpringBoot中集成SSM及其他插件

1、创建spring Boot项目导入如下基础依赖 <!-- 打包方式 jar 包 --> <packaging>jar</packaging><!-- 指定父工程 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</art…

[附源码]Node.js计算机毕业设计房屋中介管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

[附源码]Python计算机毕业设计SSM基于web的图书借阅管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

常规设置Apache服务器实例

常规设置Apache服务器实例 1&#xff0e;设置文档根目录和首页文件的实例 【例1】默认情况下&#xff0c;网站的文档根目录保存在/var/www/html中&#xff0c;如果想把保存网站文档的根目录修改为/home/wwwroot&#xff0c;并且将首页文件修改为myweb.html&#xff0c;那么该如…