黑马程序员技术交流社区

标题: Exception和RuntimeException的疑问 [打印本页]

作者: 张青峰    时间: 2012-2-8 20:48
标题: Exception和RuntimeException的疑问
如何理解:Exception在程序中必须使用try....catch
RuntimeException:在程序中可以不使用try....catch,但是如有异常有JVM进行处理?
作者: 最初的理想    时间: 2012-2-8 21:01
RuntimeException,也就是运行时异常的确是抛给jvm处理,表示代码本身存在问题,try-catch对于RuntimeException没有什么意义,不能解决bug所带来的问题,编译时异常其实是可以这么理解:你的代码本身没有问题(运行时异常是你的代码本身有问题),但是代码里如果含有处理文件流(这里只是举个例子,还有很多类似的其它的情况)的时候,java规定,遇到这种情况,必须要在代码里强制抛出可能遇到的文件流异常,你可以在方法开头就throws,或者在catch后面进行捕获。其实代码本身逻辑跟语法都是没问题,但是文件流这种操作本身会存在潜在的问题与风险,这种问题是与你的代码无关的,java会强制要求在代码里作出预期处理。也就是刚才说的要么在方法开头就throws可能遇到的文件异常,要么就去catch后面捕获具体的文件异常。如果你在代码里不做这样的处理,运行代码后,控制台就会输出错误。代码一样跑不起来。编译时异常是java语言强制你处理。不处理不编译,运行时异常是你代码有问题,运行了才能发现。


作者: Joyuang    时间: 2012-2-8 21:06
只有RuntimeException及其子类是运行时异常,除了RuntimeException及其子类外,剩下的Exception和其子类都是编译时异常。
如果程序中出现了编译时被检测的异常,那么必须声明,并要给出处理方式,否则,编译失败。因为该异常是被编译器识别并检查的。
所以Exception在程序中必须使用try....catch
RuntimeException:在程序中可以不使用try....catch,有异常了会抛出,因为这个不是原有程序可以解决的,必须得告知编程者改正代码。
作者: 余海龙    时间: 2012-2-8 21:21

RuntimeException: 是Exception的子类, RuntimeException及其子类都是运行时异常,即在编译是编译不能对其进行检查,
                             但是在运行时,JVM会检测到其异常。
运行时异常即可以用try....catch捕获,也可以将其抛出,如果抛出,最终抛给的是虚拟机,虚拟机会在底层进行处理并结束程序。

Exception: 其子类除了RuntimeException外,都是编译时异常,编译时异常时在编译的时候就可以检测到的,程序员是可以对其进行处理的,如果不处理将不能运行。

编译时异常只能用try....catch并进行处理。
作者: 易伟    时间: 2012-2-8 21:29
1:首先RuntimeException是Exception的子类
2: Exception 分为 checked异常和RuntimeException异常
3:checked异常有两种处理方式 a: 向外抛出,由调用它的方法处理该异常,会产生异常传播,同时应该符合throws抛出异常的限制
  b: 使用try catch块捕获异常
   RuntimeException运行时异常,会将异常交予JVM处理,一般是打印异常栈,并停掉java程序
4:异常转义:捕获原始的异常,然后抛出一个新的业务异常,新的业务异常包含对原始异常的提示信息,这种处理方式称为异常转义
作者: 侯丽星    时间: 2012-2-13 19:53
对于Exception分为两种:
1.编译时被检测的异常。(也即这些异常必须在catch块中进行处理,否则编译报错。)
2.编译时不被检测的异常(运行时异常,RuntimeException以及其子类)

RuntimeException(运行时异常)是Exception的一个特殊的子类异常
1.若函数内throw了RuntimeException及其子类的异常,那么函数上不用throws声明。
2.如果在函数上声明了该异常,调用者可以不用进行处理。
之所以不用在函数上声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。


自定义异常时,如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException。








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