checked & unchecked exception

Java的可检测异常和非检测异常泾渭分明。可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则。

非检测异常不遵循处理或声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已解决了这样一个异常。有两个主要类定义非检测异常:RuntimeException和Error。

为什么Error子类属于非检测异常?这是因为无法预知它们的产生时间。若Java应用程序内存不足,则随时可能出现OutOfMemoryError;起因一般不是应用程序中的特殊调用,而是JVM自身的问题。另外,Error类一般表示应用程序无法解决的严重问题,故将这些类视为非检测异常。

RuntimeException类也属于非检测异常,一个原因是普通JVM操作引发的运行时异常随时可能发生。与Error不同,此类异常一般由特定操作引发。但这些操作在Java应用程序中会频繁出现。例如,若每次使用对象时,都必须编写异常处理代码来检查null引用,则整个应用程序很快将变成一个庞大的try-catch块。因此,运行时异常不受编译器检查与处理或声明规则的限制。

将RuntimeException类作为未检测异常还有一个原因:它们表示的问题不一定作为异常处理。可以在try-catch结构中处理NullPointerException,但若在使用引用前测试空值,则更简单,更经济。同样,可以在除法运算时检查0值,而不使用ArithmeticException。


public class ExceptionTypeTest {

public void doSomething()throws ArithmeticException{


System.out.println();

}

public static void main(){


ExceptionTypeTest ett = new ExceptionTypeTest();


ett.doSomething();

}
}
问题1:上面的程序能否编译通过?并说明理由。 解答:能编译通过。分析:按照一般常理,定义doSomething方法是定义了ArithmeticException异常,在main方法里里面调用了该方法。那么应当继续抛出或者捕获一下。但是ArithmeticException异常是继承RuntimeException运行时异常。java里面异常分为两大类:checked exception(检查异常)和unchecked exception(未检 查异常),对于未检查异常也叫RuntimeException(运行时异常),对于运行时异常,java编译器不要求你一定要把它捕获或者一定要继续抛出,但是对checked exception(检查异常)要求你必须要在方法里面或者捕获或者继续抛出.     

 问题2:上面的程序将ArithmeticException改为IOException能否编译通过?并说明理由。 解答:不能编译通过。分析:IOException extends Exception 是属于checked exception ,必须进行处理,或者必须捕获或者必须抛出 总结:java中异常分为两类:checked exception(检查异常)和unchecked exception(未检查异常),对于未检查异常也叫RuntimeException(运行时异常).         对未检查的异常(unchecked exception )的几种处理方式:         1、捕获         2、继续抛出         3、不处理         对检查的异常(checked exception,除了RuntimeException,其他的异常都是checked exception )的几种处理方式:         1、继续抛出,消极的方法,一直可以抛到java虚拟机来处理         2、用try...catch捕获         注意,对于检查的异常必须处理,或者必须捕获或者必须抛出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值