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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 齐宁宁 中级黑马   /  2014-9-21 19:44  /  2644 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在Java编程中的异常分为两类:编辑异常(可继承Exception)和运行异常(可继承RuntimeException),我是Java初学者,觉得异常的处理有点抽象,不是太理解,到底什么时候的异常继承Exception?什么时候继承RuntiumeException类啊?求黑马高手指点啊

23 个回复

正序浏览
______雨点ペ 发表于 2014-9-22 23:23
你这学的挺糊涂的……运行时异常在编译时不需处理,运行时异常在运行时才会出现,多数为语法错误,需要程序 ...

额。。。我是个菜鸟,所以又很多不懂得地方,希望大神们多多指点啊
回复 使用道具 举报
黑马-胡明 发表于 2014-9-22 21:24
RuntiumeException运行时异常,往往在处理异常时使用,在catch(){ throw  new RuntimeException("出现错 ...

哦哦。 这样啊,知道了,谢谢啊
回复 使用道具 举报
根据需要选择继承哪种,一般的话继承Exception
回复 使用道具 举报
LFW 中级黑马 2014-9-22 23:52:10
21#
你的4/0,这写继承Exception不能算是错,runtime也是Exception的一种,为什么把Java编程中的异常分为两类:编辑异常(可继承Exception)和运行异常(可继承RuntimeException)两种,是因为这样更合理,既然都不能运算下去了,不可能被处理了,何不直接停下来,让程序员改代码。(我的理解就是这样的)。你可以再去看看毕老师的4/0那个例子,就是引出runtimeexception的那个视频。
回复 使用道具 举报
LFW 中级黑马 2014-9-22 23:48:17
20#
齐宁宁 发表于 2014-9-22 19:21
我是把角标错误理解为语法错误,它超出了角标范围,逻辑上没有错误。这样的话用我上面的理解去继承Except ...

你想运算4/0,这就是不能处理。你去连接数据库,网络不好,挂了没连上,你的try到了,catch就写出了对应网络不好等的解决方式(重新连接),这就是能处理。你的摩托车上牌了,被偷,警察局的一看你的有牌,能处理,那就编译时被检测异常(Exception是“大类”,runtimeexception是其中的子类,要尽量写准确一点的异常,尽量不要笼统地就写Exception);你本身连摩托车都没有,警察局就不能处理,你就runtimexception。
回复 使用道具 举报
LFW 中级黑马 2014-9-22 23:42:29
19#
w936074874 发表于 2014-9-22 14:14
我的理解是预知异常不会导致程序崩溃就继承Runtime

这个不对吧,RuntimeException,非编译时异常,(语句都是正确的),但是必须要让程序停下来的异常,因为你的代码错的实在离谱,例如空指针异常、by zero,这都是让运算无法继续下去的异常,必须停下来,修改代码。

而编译时被检测异常,是因为被调用函数上声明异常,为了便于提高安全性,让调用者进行处理,调用者不处理则编译失败。



Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;

回复 使用道具 举报 1 0
你这学的挺糊涂的……运行时异常在编译时不需处理,运行时异常在运行时才会出现,多数为语法错误,需要程序员手动修改语法错误;还有服务器异常,例如百度服务器出问题了,这不是你所能解决的异常;最后就是编译时异常Exception,但是exception有很多子类,这些子类在Java类库中都已经继承了exception,只有当你自己去定义一个异常类时,才会出现要继承exception的问题……
回复 使用道具 举报
RuntiumeException运行时异常,往往在处理异常时使用,在catch(){ throw  new RuntimeException("出现错误。");}
而,Exception是在抛出异常时使用,例如在函数上 throws Exception
回复 使用道具 举报
杨佳名 发表于 2014-9-22 19:50
我也是刚学的。我这样想,如果访问到了不存在的角标如arr[4],这时候程序该怎么去运行?当然我们知道是语 ...

恩,好的,谢谢啊
回复 使用道具 举报
本帖最后由 杨佳名 于 2014-9-22 20:52 编辑
齐宁宁 发表于 2014-9-22 19:21
我是把角标错误理解为语法错误,它超出了角标范围,逻辑上没有错误。这样的话用我上面的理解去继承Except ...


我也是刚学的。我这样想,如果访问到了不存在的角标如arr[4],这时候程序该怎么去运行?当然我们知道是语法错误,但直接内部给try-catch掉合适吗?连数据都访问不到,下面的程序看都不用看就直接挂了。就需要去修正代码。day10-04又给详细举例了,可以去看看。
回复 使用道具 举报
wudi 发表于 2014-9-22 16:31
能处理就用runtime 不能就抛出,呵呵

是在主函数中抛出?抛给虚拟机?怎么才算是能处理呢?是指语法错误吗?
回复 使用道具 举报
杨佳名 发表于 2014-9-22 17:37
比如角标越界(IndexOutOfBoundsException),定义一个int[] arr = {1,2,3,4};你想打印arr[4],虚拟机就认 ...

我是把角标错误理解为语法错误,它超出了角标范围,逻辑上没有错误。这样的话用我上面的理解去继承Exception,也能说得通。我看到视频中有说到按照能不能处理去划分继承的类,能不能处理的判断依据是什么呢?
回复 使用道具 举报
齐宁宁 发表于 2014-9-22 17:09
一般的逻辑异常大都能够处理,什么情况是不能处理的呢,能不能举个例子啊 ...

比如角标越界(IndexOutOfBoundsException),定义一个int[] arr = {1,2,3,4};你想打印arr[4],虚拟机就认为你疯了。这样的就没必要处理了
回复 使用道具 举报
wudi 发表于 2014-9-22 16:31
能处理就用runtime 不能就抛出,呵呵

一般的逻辑异常大都能够处理,什么情况是不能处理的呢,能不能举个例子啊
回复 使用道具 举报
wudi 初级黑马 2014-9-22 16:31:57
10#
能处理就用runtime 不能就抛出,呵呵
回复 使用道具 举报
天弓 初级黑马 2014-9-22 15:59:32
9#
对啊   他编译是通过的 是运行中的错误 ,所以我runtime  ,如果编译就有问题的用exception
回复 使用道具 举报
天弓 发表于 2014-9-22 14:48
比如4/0这个异常,我们用runtime主要是我们能去处理,是可以处理的异常

我感觉Exception,是用于处理编辑异常,可以简单理解为是语法异常。而RuntimException是用于处理运行异常,可以简单理解为逻辑异常。4/0,语法没问题,但是逻辑出现问题,需要继承RuntimeException
回复 使用道具 举报
天弓 初级黑马 2014-9-22 14:48:51
7#
比如4/0这个异常,我们用runtime主要是我们能去处理,是可以处理的异常
回复 使用道具 举报
我的理解是预知异常不会导致程序崩溃就继承Runtime
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马