关于JAVA中异常处理的简单阐释.
—恢复内容开始—
这是我的一篇要在博客园发布的随笔,主要是简单的概括一下我本次所学的关于异常处理的知识。有讲的不妥当的地方,或者有需要补充的,还请各位高人给指点,共同学习,虚心求学。谢谢啦~
1.首先我们来说一下有关异常的概述。
1.1 举个列子:想要洗手,结果发现水龙头停水;想要骑车回家,结果发现车胎漏气。同样,在软件运行过程中,也会遇到各种意想不到的错误影响程序的正常运行,我们将出现在程序中的这些错误称之为异常。
下面通过一个示例来演示程序中出现异常时的运行结果:
注:示例中的代码在编译时没有任何问题,但是在运行“int b = a/0”这一行时,由于除数为0,所以抛出异常“ by zero” , 导致后面的语句也无法执行。异常一旦出现就会影响程序的运行,为了保证程序的正常运行,我们需要在程序中加入异常处理的代码。
2.接着我们说一下关于异常的分类.
1.2 JAVA语言在设计时是按照类的层次结构来构建异常体系的,Throwable是所有异常类的祖先,该类有两个直接子类:Error类和Exception类。
Error:误差,错误,过失.
Exception:例外,异议.
其中Error指的是程序中无法处理的错误。 而Exception指的是程序本身可以处理的异常。
JAVA异常体系结构图如图:
本人亲手绘图。啦啦啦啦,OK,继续正题。
下面学习的异常处理的操作主要是针对Exception类及其子类的处理,异常处理的要求是能预见执行过程可能发生的异常,并且把异常处理的功能包含在程序中。
3.JAVA异常处理机制.
3.1 使用try-catch-finally捕获异常
捕获异常的操作需要通过try,catch,finally关键字来完成,编写代码时需要将可能抛出异常的语句放在try代码块中,将针对异常处理的代码放到catch代码块中。当try代码块中的内容发生异常时虚拟机会将异常信息封装成一个对象传递到catch代码块中进行处理,而finally代码块中的语句无论是否发生异常都会执行。
try-catch-finally代码块的语法如下图:
注:try-catch-finally代码块中的finally部分并不是异常处理时必须要加上的部分,try-catch部分可以单独使用。(昂…图内也有标注呦)
注2:如果try中的代码没有发生异常,则不会执行catch中的代码,但是会执行finally中的代码。(上述提到过:而finally代码块中的语句无论是否发生异常都会执行。)
如果try中的代码发生异常,则会执行catch中的代码,catch中的代码块执行完后会继续执行finally中的代码块。
提醒:
(1)可能发生异常的代码必须放入try代码块中程序才能正常捕获到异常。
(2)try语句不能独立存在,其后至少要有一个catch代码块。
(3)finally代码块不是必须存在的结构,可以根据实际需求决定是否添加。
3.2运行时异常
常见的运行时异常:如下图
注:运行时异常就是编译时可以通过,但是运行时可能发生的异常,对于常见的运行时异常我们应该重点掌握。
3.3使用throws关键字抛出异常
使用throws抛出异常的思路:如果当前方法不知道如何处理该异常,该异常由上一级调用者处理;如果main()方法也不知道如何处理该异常,会把异常交给JVM处理。JVM处理异常饿方法:打印异常信息,并终止程序运行。
使用throws抛出异常的语法结构如下:
3.4 使用throw抛出异常
一般情况下,程序中如果出现了异常就会自动抛出,同时JAVA也支持主动抛出异常。主动抛出异常可以通过throw语句来实现。
throw抛出异常代码语法结构如下:
3.5 自定义异常
JAVA中的API提供的内置异常不一定总能显示程序中发生的错误,为了弥补这种缺陷我们可以自己定义异常来显示程序中所发生的错误,那么来如何创建和使用自定义异常呢?
自问自答中:创建自定义异常需要创建类来继承Exception类或其子类,下面通过一个示例来演示如何将一个普通类变成异常类。
示例:
从示例中可以看出。创建自定义异常可以通过继承Exception类来实现,自定义异常同样也可以在程序中使用throw关键字抛出。
下面通过一个示例来演示抛出自定义异常类MyException。
示例:
本次小结:
a. Throwable类是所有异常类的祖先,Throwable类有两个直接子类Error类和Exception类。
b. Exception是指程序在正常执行时所发生的可以捕获异常处理的异常。
c. Error指的是程序运行时不能捕获且无法解决的错误。
d. Java的异常处理机制有两种:一种是使用try-catch-finally语句捕获处理异常;另一种实在方法声明部分使用throws关键字抛出异常。
e. Java中的异常分为两大类检查时异常和运行时异常。检查时异常都属于Exception类的直接子类或间接子类(RuntimeException类和其他子类外),运行时异常都属于RuntimeException类的直接子类或间接子类。
f. 创建自定义异常需要继承Exception类或其子类。
好了,今日就到这里了,参观到此结束。
—恢复内容结束—