【Java】Java异常Exception和Error有什么区别?

news2024/11/25 18:50:25

异常处理

  • Exception 和 Error 的区别
  • try-catch代码块
  • 总结

写程序就需要考虑程序中是否有异常,如果存在异常应该如何处理比较友好。Java 语言在设计之初就提供了相对完善的异常处理机制,这也是 Java 得以大行其道的原因之一,因为这种机制大大降低了编写和维护可靠程序的门槛。如今,异常处理机制已经成为现代编程语言的标配。

Exception 和 Error 的区别

了解一下Exception 和 Error 的区别:

  • Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
  • Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。
  • Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。
  • Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException 之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

在这里插入图片描述
这张图可以看出Throwable 类下面的 Error、Exception 的类图,Error和Exception下面还有哪些类方法等等

try-catch代码块


try {
   // 业务代码
   // …
} catch (IOException e) {
    e.printStackTrace();
}

上面一段代码大家应该都不陌生,通过try-catch代码处理异常,是常规的方式了。但是try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的 try 包住整段的代码;与此同时,利用异常控制代码流程,也不是一个好主意,远比我们通常意义上的条件语句(if/else、switch)要低效。
Java 每实例化一个 Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。

总结

1.Error:系统错误,虚拟机出错,处理不了,也不需要我们来处理。
2.Exception,可以捕获的异常,且作出处理。也就是要么捕获异常并作出处理,要么继续抛出异常。需要修改代码
3.RuntimeException,经常性出现的错误,可以捕获,并作出处理,可以不捕获,也可以不用抛出。ArrayIndexOutOfBoundsException像这种异常可以不捕获,为什么呢?在一个程序里,使用很多数组,如果使用一次捕获一次,则很累。
4.继承某个异常时,重写方法时,要么不抛出异常,要么抛出一模一样的异常。
5.当一个try后跟了很多个catch时,必须先捕获小的异常再捕获大的异常。
6.假如一个异常发生了,控制台打印了许多行信息,是因为程序中进行多层方法调用造成的。关键是看类型和行号。
7.上传下载不能抛异常。上传下载一定要关流。
8.异常不是错误。异常控制代码流程不利于代码简单易读。
9.try catch finally执行流程,与 return,break,continue等混合使用注意代码执行顺序。不是不可以,而是越是厉害的人,代码越容易理解。

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

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

相关文章

三方线上美食城|基于Springboot的三方线上美食商城系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

Neo4j 实战(一)-- Mac neo4j 安装与配置

前言 Neo4j是一个高性能的,Nosql图形数据库。Nosql =no sql,即与传统的将数据结构化并存储在表中的数据库不一样。Neo4j将数据存储在网络上,我们也可以把Neo4j视为一个图引擎。我们打交道的是一个面对对象的、灵活的网络结构而不是…

【消息中间件】RocketMQ底层如何实现生产者发送消息

目录 一、前言 二、实现生产者发送消息 1、启动生产者 1.1、RocketMQTemplate消息发送模板 1.2、afterPropertiesSet()逻辑 1.3、DefaultMQProducer#start()逻辑 2、DefaultMQProducer#start()启动逻辑 2.1、更新路由信息到本地 2.2、从本地获取主题Topic信息 2.3、数…

flink on yarn

文章目录flink sql client on yarnsession 模式Per-Job Cluster 模式flink run安装完hadoop 3.3.4之后,启动hadoop、yarn 将flink 1.14.6上传到各个服务器节点,解压 flink sql client on yarn https://nightlies.apache.org/flink/flink-docs-release…

SQL注入

目录 一、SQL注入原理 二、SQL注入的危害 三、SQL注入的分类 四、SQL注入的流程 五、总结 一、SQL注入原理 1.SQL注入产生的原因: 当Web应用向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造…

面试真题 | 需求评审中从几个方面发现问题

面试官问题 在需求评审会议中,你会发现什么问题? 在需求评审时,是通过哪几个角度来进行考虑及发现问题的? 考察点 是否参加过需求评审 在需求评审过程中是否能提出有效的问题 4个角度发现问题 在需求评审的过程中通过以下4个…

【Vue 快速入门系列】一文透彻vue中使用axios及跨域问题的解决

文章目录一、什么是Axios?1.前置知识2.vue中使用axios3.Axios两种请求方式①.调用接口②.传入对象3.Axios支持的请求类型①.get请求②.post请求③.put请求④.patch请求⑤.delete请求二、跨域问题解决方案1.什么是跨域问题?2.解决方案一:在Vue…

基于微信小程序的社区心理健康服务-计算机毕业设计

项目介绍 社区心理健康服务平台小程序采用java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户、咨询师三部分,管理员服务端:首页、个人中心、用户管理、咨询师管理、心理书籍管理、相关资源管理、试卷管理、试题管理、系统管理、订单管理&…

希沃 API 网关架构演进之路

网关往期迭代与痛点 希沃网关的发展经历了四个版本的迭代。2013 年公司开始尝试互联网业务,那时候采用了 OpenRestyNGINX 静态配置的方式搭建了最初的网关,开发人员通过 SCP 来发布。与此同时一个比较严重的问题就是,每次上线发布都需要运维…

喜讯+1!袋鼠云数栈技术团队获“2022年度优秀开源技术团队”

近日,在“开源中国(OSCHINA)”开展的年度评选中,袋鼠云数栈技术团队凭借在2022年间的技术分享频率及质量、运营积极性等多方面的表现,荣获“2022年度优秀开源技术团队”的称号,这也是袋鼠云数栈技术团队连续…

umi学习总结

文章目录umi介绍umi是什么?umi的特性开发环境Node.js依赖管理工具目录结构路由配置路由页面跳转Link组件路由组件参数:路由动态参数query信息样式使用css样式dva为什么需要状态管理umi如何管理状态umi介绍 umi是什么? Umi,中文发…

自定义委托类

setItemDelegete();该函数可以自定义委托类 该例子为Qt官网的一个例子:使用QSpinBox来提供编辑功能 首先创建一个项目:名为object在项目中添加一个c类,类名为SpinBoxDelegate 修改该类的基类:更改为QImageDelegate,然后需要添加重…

12/15历史上的今天

宜找代驾 星期四 农历十一月廿二 今夜无人拥你入怀不如喝完杯中酒走入夜色中踏上回家的归途 *约翰-梅尔西藏墨脱公路嘎隆拉隧道顺利贯通 2010年12月15日,西藏墨脱公路控制性工程——嘎隆拉隧道顺利贯通。   2010年12月15日西藏墨脱公路控制性工程——嘎隆拉隧道…

华为开源自研AI框架昇思MindSpore应用实践:RNN实现情感分类

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据准备1.数据下载模块2.加载IMDB数据集2.加载预训练词向量三、数据集预处理四、模型构建1.Embedding2.RNN(循环神经网络)3.Dense4.损失函数与优化器5.训练逻辑6.评估指标和逻辑五、模型训练与保存六、模…

电脑重装系统后卡顿怎么办?教你快速解决电脑卡顿问题

​Win10电脑卡顿怎么办?许多用户在使用电脑的过程中发现,随着使用时间的增加,电脑会越来越卡顿。有些小伙伴就会选择重装电脑系统,那么我们在重装电脑之后要进行什么操作才能让电脑不卡顿呢? 操作方法: 优化…

java学生成绩管理系统源码swing(GUI) MySQL带开发教程永久学习

今天给大家演示一款由Java swing即GUI和mysql数据库实现的,学生成绩管理系统,系统采用了MVC的设计模式,结构层次非常清晰,此外,该项目有手把手的开发教程,适合刚入门Java的学生学习,下面我们来看…

Pr:导出设置

◆ ◆ ◆导出设置(媒体文件)Export Settings(Media File)基本设置文件名File Name指定导出的文件名。位置Location可以点击蓝色字更改导出的文件的存放位置。预设Preset选择导出预设。匹配源 Match Source预设会将大多数设置与源…

[附源码]Python计算机毕业设计高校贫困生信息管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Mysql 查询获取 为数字的 字符串

先看示例数据: test_value 字段 为 VARVCHAR 类型 数据样例: 包含 纯数字, 带小数点的数字, 字符串 获取里面的纯数字 :使用正则匹配 函数 REGEXP ,返回 1代表不匹配, 返回 0 代表匹配 包含小数点 [^0-…

两步开启研发团队专属ChatOps|极狐GitLab ChatOps 的设计与实践

本文来自: 彭亮 极狐(GitLab) 高级产品经理 郭旭东 极狐(GitLab) 资深创新架构师 舒文斌 极狐(GitLab) 高级网站可靠性工程师 最近几天,ChatGPT 真是杀疯了 ! 相信大家的朋友圈,已经被调戏、询问或探讨 ChatGPT 的贴子刷屏。 看到…