黑马程序员技术交流社区

标题: Java中两种异常有什么区别? [打印本页]

作者: Y1011    时间: 2015-7-19 21:44
标题: Java中两种异常有什么区别?
Java中的checked异常和unchecked异常他们主要的区别在哪?
作者: 刘贤俊    时间: 2015-7-20 00:20
还没遇到过这两种异常,不知道是怎么产生的
作者: a546036242    时间: 2015-7-20 00:30
看不懂!!!~膜拜!!
作者: yongaidongbing    时间: 2015-7-20 00:51
。。。。。。。。。。。。。。。
作者: 吐槽ing    时间: 2015-7-20 21:10
扩展java.lang.Exception的异常则为checked异常  对于这类异常编译器要求重新捕获或者继续抛出  也就是如果不捕获或抛出  就不能通过编译  编译器会报异常
扩展java.lang.RuntimeException的异常是unchecked异常  对于这一类异常  不是必须捕获或抛出  也可以捕获或抛出    这类异常不捕获或抛出在编译期间便不会出现异常  如果在运行时间出现异常 则会抛出该异常
作者: e咕噜    时间: 2015-7-20 21:36
简单地讲,checked是可以在执行过程中恢复的,而unchecked异常则是无法处理的错误。
checked异常:
表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。
必须在代码中显式地处理。比如try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。
继承自java.lang.Exception(java.lang.RuntimeException除外)。
unchecked异常:
表示错误,程序的逻辑错误。是RuntimeException的子类,比如IllegalArgumentException, NullPointerException和IllegalStateException。
不需要在代码中显式地捕获unchecked异常做处理。
继承自java.lang.RuntimeException(而java.lang.RuntimeException继承自java.lang.Exception)。
Java中的checked异常需要在代码中显式地通过try-catch捕获或者再抛出,如果不需要对这个异常做处理,可以简地将异常再次抛出,这种异常存在一点不足,很多人习惯在代码中直接写一个空的catch块,这样不但使代码变得有些冗余和“丑陋”,而且给调试带来麻烦,增加了代码维护的难度。所以有人说checked使代码变的冗长,空的catch块也没什么意义,所以checked异常应该从Java标准中去除,像C#中就没有checked异常的概念,C#中不强制显式地捕获异常。
Java异常之所以会分为这两种,应该是出于如下考虑:
checked异常可以帮助开发人员意识到哪一行有可能会出现异常,因为Java的API已经说明了调用哪些方法可能会抛出异常。如果不做处理编译就不能通过,从某种程度上说,这种做法可以避免程序的一些错误




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2