Java 异常处理


首先,Java中进行异常处理的目的是使用异常提供一致的错误报告类型(异常是Java中唯一正式的错误报告机制),使得系统能够与客户端代码可靠的沟通问题;其次,通过异常处理可以提供错误的恢复机制,从而提高系统的健壮性;另外,异常处理可以将错误处理的代码从错误发生的地方分离出来,从而在这段代码中专注要完成的事情,而在另一段代码中专注如何处理错误。

换句话说,异常可以允许我们强制程序停止运行,并告诉我们出现了什么问题,或者强制程序处理问题并返回到稳定的状态。

异常抛出

当前环境无法获得必要的信息来解决问题时,就必须从当前环境跳出并把问题交给上一级去处理,这时便需要抛出异常。

当抛出异常时,有几件事情会随之发生。首先,使用new在堆上创建对象。然后当前的执行路径被终止,并从当前环境弹出异常对象的引用。此时异常处理机制接管程序,开始进入到异常处理程序,而异常处理程序的任务就是从错误状态中恢复,以使程序要么换一种方式运行,要么继续执行下去。

通过throw可以抛出任意类型的throwable对象(它是异常类型的根类),通过new创建一个异常对象后,将此对象的引用传给throw即可。这里可以将抛出异常看作是一种特殊的方法返回,尽管返回的异常类型通常和方法设计的返回类型并不一致。

throw new NullPointerException();

捕获异常

使用try{}catch(){}finally{}进行捕获和处理异常,需要注意的是可以有多个catch子句,每个子句捕获某一种异常,异常处理机制将按照顺序搜索第一个匹配的异常并进行处理,并且派生类的对象也可以匹配其基类的处理程序。

创建自定义异常

通常创建自定义异常非常简单,只需要如下一行代码即可,没有必要新增属性或者创建自定义构造器,最重要的是给自定义异常起一个含义明确的名称,这样大多数情况下就已经够用了。

class MyException extends Exception {}

继承的这个标准异常类有两个构造函数,一个是默认构造器,还有一个可以接受字符串参数的构造器,以便能够把一些相关信息放入异常对象。

Java异常类型

Throwable是异常类型的根类,表示任何可以被异常抛出的类。一般分为两种类型:ErrorException。前者用来表示编译时和系统错误,一般使用ide的话,编辑器里就直接报错了,因此这种异常一般不需要关心(因为很容易避免)。而真正需要程序员关心的通常是Exception

运行时异常RuntimeException会自动被Java虚拟机抛出,也成为不受检查异常,例如NullPointerException,这些异常不需要在方法的异常说明中将其列出来,这些异常一般属于错误,将被自动抛出并且自动将异常输出报告给System.err。究其原因,其实RuntimeException代表的就是需要及时处理的编程错误,这些默认行为给调试带来了便利。

什么时候应该使用异常

  1. 解决问题并且重新调用产生异常的方法
  2. 进行少许修补,然后绕过异常发生的地方继续执行
  3. 用别的途径处理以代替产生异常的途径
  4. 需要将特定的异常抛至更高层
  5. 终止程序
  6. 让类库和程序更安全
Copyright © jverson.com 2019 all right reserved,powered by Gitbook 20:15

results matching ""

    No results matching ""