A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张青峰 黑马帝   /  2012-2-8 20:48  /  2580 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何理解:Exception在程序中必须使用try....catch
RuntimeException:在程序中可以不使用try....catch,但是如有异常有JVM进行处理?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

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

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

编译时异常只能用try....catch并进行处理。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
1:首先RuntimeException是Exception的子类
2: Exception 分为 checked异常和RuntimeException异常
3:checked异常有两种处理方式 a: 向外抛出,由调用它的方法处理该异常,会产生异常传播,同时应该符合throws抛出异常的限制
  b: 使用try catch块捕获异常
   RuntimeException运行时异常,会将异常交予JVM处理,一般是打印异常栈,并停掉java程序
4:异常转义:捕获原始的异常,然后抛出一个新的业务异常,新的业务异常包含对原始异常的提示信息,这种处理方式称为异常转义

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
对于Exception分为两种:
1.编译时被检测的异常。(也即这些异常必须在catch块中进行处理,否则编译报错。)
2.编译时不被检测的异常(运行时异常,RuntimeException以及其子类)

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


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



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马