java中的异常

在Java编程中我们经常会遇到异常,像空指针异常、数组越界异常等,但你真正了解异常吗,程序出现了异常我们要如何处理,在mvc的编程模式下要如何优雅的处理异常,这就是本文我们要解决的问题。

一、初始异常

在Java中所有的异常类有个超类那就是java.lang.Throwable,java API中对此类的解释是“Throwable 类是 Java 语言中所有错误或异常的超类”,由这句话我们可以得出,在Java语言中错误也是属于异常的一种。Throwable有两个子类java.lang.Error和java.lang.Exception,由此也可以看出Error属于异常的一种。经常我们会听到运行时异常、检查性异常等,这些代表什么意思。下面我们来看Exception类的子类有那些,

从上图中可以看到很多平时常见的异常:SQLException、IOException、RuntimeException等。没错,RuntimeException类及其子类统称为运行时异常;Exception下的其他异常类则为非运行时异常(不包括Error)。那么何为检查性异常和非检查性异常,我们把运行时异常(RuntimeException类及其子类)和Error(及其子类)统称为非检查性异常,其他的则为检查性异常。下面给出通俗的解释,

运行时异常,即在程序运行过程中发生的异常,在编译期间编译器不会给出任何提示,一般都是由于自身程序逻辑错误导致的,可以选择处理也可以不处理,例如空指针异常(),在编译期间我们不会察觉,只有程序真正运行时才可能发生。其范围为java.lang.RuntimeException类及其子类。

非检查性异常,即Java编译器不会进行检查,在编译期间无法判断异常是否会发生。其范围为运行时异常(java.lang.RuntimeException类及其子类)和错误(java.lang.Error)。

非运行时异常,即Java编译器会给出提示,必须进行异常处理,否则编译不通过。其范围为Exception类下除了RuntimeException类及其子类以外均属于非运行时异常。

检查性异常,即Java编译器会进行检查,必须进行异常处理。其范围为Exception类下除了“RuntimeException类及其子类以外的类”和“Error及其子类”;

二、异常处理

通过上面对异常的理解,可以知道对于运行时异常(非检查性异常)我们可以不进行处理,但非运行时异常必须处理。Java提供了一套异常处理机制,其关键字为"try  catch finally"、“throws”、“throw”。

try catch finally

是用来捕获异常的,用在方法体内。这里捕获的异常为非运行时异常(检查性异常),对于异常来说,只要一行代码发生了异常那么其后面的代码不会再执行,如果使用try catch,那么代码会调转到catch块中执行,最后执行finally块中的语句。从上面,能够看出异常时多么的不和谐,发生异常行后的代码均不会执行,为此我们要使用try catch finally进行异常捕获。捕获之后我们的程序会继续向下执行(catch块后的代码),如果不捕获异常会抛给调用此方法的上层,最后到用户层。

throws

抛出异常,用在方法声明之后。标识此方法内发生的异常均抛给方法调用者,当前方法不进行异常处理(捕获异常),但可以在调用此方法的方法内进行异常捕获。

throw

异常抛出语句,用在方法体内,其作用为抛出一个异常,后面必须是一个异常对象,等同于程序发生异常,即在throw出发生异常。throw之后的代码均不会执行。

三、mvc模式下的异常处理

在现在的web应用中多数采用MVC的分层思想,即分为视图层、控制层、业务层、数据层。针对没一层都会发生异常,这里建议在控制层进行异常捕获(try catch finally),在业务层及数据层抛出异常。其好处是可以有同一的异常处理机制,便于程序处理。

 

有不正之处,欢迎指正!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340