java的异常机制

异常机制

在程序的世界里面不是一帆风顺的,所有程序的执行都会有一些因素导致程序出错,如:文件找不到、非法参数、网络超时等。为了保证正序正常运行,在设计程序时必须考虑到各种异常情况,并正确的对异常进行处理。异常也是一种对象,java当中定义了许多异常类,并且定义了一个Throwable类作为所有异常的父类。Java语言设计者将异常划分为两类:Error(错误)和Exception(异常)。 一、Error(错误)分为: 1.Virtual MachineError(虚拟机运行错误) 2.NoClassDefFoundError(类定义错误) 3.OutOfMemoryError(内存溢出)。 Error是非代码性错误。因此,当此类错误发生时是无法恢复的。 二、Exception(异常)分为 1.RuntimeException(运行时异常) 2.编译时异常(除RuntimeException外的异常) 运行时异常又分为:1)空值对象的引用(NullPointerException)、2)数组下标越界(ArrayIndexOutBoundException)等在编译时通过在运行时才提示的异常。

另外还有可查异常与不可查异常:java的所有异常可以分为可查异常(checked exception)和不可查异常(unchecked exception)。
1、可查异常:编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除RuntimeException及其子类外,其他的Exception异常都属于可查异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
2、不可查异常:编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获它,也没有使用throws抛出该异常,编译也会正常通过。该类异常包括运行时异常(RuntimeException极其子类)和错误(Error)。

异常处理

在java应用中,异常的处理分为抛出异常和捕获异常。
抛出异常:当一个方法出现错误而引发异常时,该方法会将该异常类型以及异常出现时的程序状态信息封装为异常对象,并交给本应用。运行时,该应用将寻找处理异常的代码并执行。任何代码都可以通过throw关键词抛出异常,比如java源代码抛出异常、自己编写的代码抛出异常等。

捕获异常:一旦抛出异常,jvm自动根据该异常对象寻找合适异常处理器(Exception Handler)来处理该异常。所谓合适类型的异常处理器指的是异常对象类型和异常处理器类型一致。

对于不同的异常,java采用不同的异常处理方式:

1、运行异常将由jvm自动抛出,应用本身可以选择处理或者忽略该异常。

2、对于方法中产生的Error,该异常一旦发生JVM将自行处理该异常,因此java允许应用不抛出此类异常。

3、对于所有的可查异常,必须进行捕获或者抛出该方法之外交给上层处理。也就是当一个方法存在异常时,要么使用try-catch语句捕获(在catch后面可以加一个finally来执行必须要执行的代码),要么使用该方法使用throws将该异常抛调用该方法的上层调用者。
1、try-catch语句
try {

              //可能产生的异常的代码区,也称为监视区

    }catch (ExceptionType1 e) {

              //捕获并处理try抛出异常类型为ExceptionType1的异常

    }catch(ExceptionType2 e) {

              //捕获并处理try抛出异常类型为ExceptionType2的异常

    }finally{

   //无论是出现异常,finally块中的代码都将被执行

}
2、try-catch-finally代码块的执行顺序:

  1)try没有捕获异常时,try代码块中的语句依次被执行,跳过catch。如果存在finally则执行finally代码块,否则执行后续代码。

  2)try捕获到异常时,如果没有与之匹配的catch子句,则该异常交给JVM处理。如果存在finally,则其中的代码仍然被执行,但是finally之后的代码不会被执行。

  3)try捕获到异常时,如果存在与之匹配的catch,则跳到该catch代码块执行处理。如果存在finally则执行finally代码块,执行完finally代码块之后继续执行后续代码;否则直接执行后续代码。另外注意,try代码块出现异常之后的代码不会被执行。

3、 throws抛出异常

如果一个方法可能抛出异常,但是没有能力处理该异常或者需要通过该异常向上层汇报处理结果,可以在方法声明时使用throws来抛出异常。这就相当于计算机硬件发生损坏,但是计算机本身无法处理,就将该异常交给维修人员来处理。

publicmethodName throws Exception1,Exception2….(params){}

其中Exception1,Exception2…为异常列表一旦该方法中某行代码抛出异常,则该异常将由调用该方法的上层方法处理。如果上层方法无法处理,可以继续将该异常向上层抛。

4、throw抛出异常

在方法内,用throw来抛出一个Throwable类型的异常。一旦遇到到throw语句,后面的代码将不被执行。然后,便是进行异常处理——包含该异常的try-catch最终处理,也可以向上层抛出。注意我们只能抛出Throwable类和其子类的对象。

java异常机制的提供可以让开发人员对于程序出错的异常有一定的处理措施,让开发人员编写程序会更加轻松。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值