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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋美成 中级黑马   /  2014-3-21 17:40  /  1333 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋美成 于 2014-3-24 11:28 编辑

请教一下大家,程序在图片里面,程序前面声明了两个异常,分别为,ArithmeticException与ArrayIndexOutOfBoundsExceptiong;
在后面的处理中,也定义了相应的处理办法
Q1:但是在前面的try语句块中,没有包含相应有关数组角标越界的语句内容,但程序执行是居然还是可以发现角标越界的错误,这是什么原理啊?那么try语句块的内容到底要包含些什么内容呢?
Q2:前面老师说异常处理的格式包括try{}catch{}和finally{};但好多程序并没有包含finally语句块,莫非这个格式并不是固定的?

QQ图片20140321173245.jpg (59.11 KB, 下载次数: 6)

多异常

多异常

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

8 个回复

倒序浏览
1.首先代码应该是执行Demo类方法的时候抛出的的异常(你在方法里没有Catch)就给了上一层了.
2.try-catch-finally ---finally里是一定要执行的语句(除非虚拟机退出).但有的时候可以不需要fianlly.如果你想一定执行某些代码(例如关闭资源.),就将这段代码放到finally后面.

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
关于Q2,finally语句不一定需要, 当你的程序由于try{}语句的异常无法继续执行,而又需要执行try{}后面的语句时,可以用finally{}包括要执行的语句,这样写后,就会一定执行这个语句了,总得来说finally{}中的语句时一定执行的。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
回答1:
楼主要搞清楚Exception和RuntimeException的区别:
继承Exception而没有继承RuntimeException的子类异常,是必须要被catch或者throw的。
而继承RuntimeException的子类异常是可以不被catch的。
区分可以这样区分:
1、当你遇到异常情况时,本身不是由于程序本身的逻辑引起的,是由外部因素引起(比如:数据库异常、网络异常、文件异常),这些,异常程序中没有办法容错。必须显式的提供异常处理的方案。所以这类异常一般继承于Exception而没有继承RuntimeException。
2、当你在代码运行时出现由于程序内部本身没有对数据安全性没有校验引起的异常(比如:数组越界、对null执行方法调用、拿0当除数做除法运算)。这些场景,应该去捕获代码的安全性检查部分,而不是将其捕获。所以应该用直接继承于RuntimeException的子类异常。

回答2:try-catch-finally是一组相关的,但不是必须的操作。
也就是说:
try-catch
try-finally
try-catch-finally
这几种组合都可以。关键看你代码中的需求。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报

    先回答您第一个问题吧:
            try{}语句包含的是需要检测的语句,如果try{}语句出现语法或其他的问题就会抛出异常当try语句中的语句出现错误抛ArrayIndexOutOfBoundException异常时就会输出“角标越界”,而与你在try语句中是否包含相应有关数组角标越界的语句内容无关。
   第二个问题:
            finally语句是一定要执行的语句(除非虚拟机退出).如果你想一定执行某些代码(例如关闭资源.),就将这段代码放到finally后面.如果没有不执行也是可以的。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
凝霜的枯藤 发表于 2014-3-21 17:52
1.首先代码应该是执行Demo类方法的时候抛出的的异常(你在方法里没有Catch)就给了上一层了.
2.try-catch-fin ...

恩,明白了,谢谢哈
回复 使用道具 举报
Ranger 发表于 2014-3-21 18:09
关于Q2,finally语句不一定需要, 当你的程序由于try{}语句的异常无法继续执行,而又需要执行try{}后面的语 ...

谢谢您,明白了
回复 使用道具 举报
pifuhanshu 发表于 2014-3-21 18:23
先回答您第一个问题吧:
            try{}语句包含的是需要检测的语句,如果try{}语句出现语法或其他 ...

恩,明白了,谢谢
回复 使用道具 举报
Q1:因为catch中的内容不一样啊;  Q2:try{}catch{}和finally{};    finally{}是必须行执行的内容是为咯保证程序的健壮性, 打个比方就如if(){}else{} ,可以只要if不要else  可以根据情况而定, 希望给的答案对你有帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马