java中的异常

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

一、初始异常

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

java中的异常_第1张图片

从上图中可以看到很多平时常见的异常: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),在业务层及数据层抛出异常。其好处是可以有同一的异常处理机制,便于程序处理。

 

有不正之处,欢迎指正!

你可能感兴趣的:(java中的异常)