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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨千里 中级黑马   /  2012-9-5 10:55  /  2146 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问用这种格式:

Try{
}catch(Exception e){
..
}catch(FileNotFoundException a){
}

来捕获异常,可以吗?


10 个回复

倒序浏览
这样不可以,有多个catch块中前面的异常不能是后面的父类
这样就可以了
try{}
catch(FileNotFoundException a){}
catch(Exception e){}
这样就可以了

评分

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

查看全部评分

回复 使用道具 举报
如果里面有父类异常比如你那里的
catch(Exception e)这个异常一定要放到子类异常
catch(FileNotFoundException a)的后面。
如果有多个异常类一定要将父类异常放在所有子类异常的后面。
回复 使用道具 举报
这样编译是不会通过的。第一个异常捕获的是Exception,第二个异常捕获的是Exception的子类,编译器会认为所有的异常都被第一个捕获了。那么第二个捕获异常的语句将永远得不到执行,这样编译就不会通过,正确做法是将子类异常捕获语句写在父类异常捕获语句的前面。逻辑上才是合理的。
回复 使用道具 举报
向这类问题,自己编译一次就知道可不可以了,所以LZ有骗分嫌疑.
回复 使用道具 举报
这样是不可以的,Java异常处理的结构为  基接口为Throwable  Exception和RuntimeException实现了Throwable这个接口    Exception及他的子类在程序中必须捕捉,RuntimeException及他的子类可以捕捉也可以不捕捉,当捕捉异常时,必须先捕捉小的,在捕捉大的,也就是说如果要是有两个异常A和B,B继承自A需要先捕捉B在捕捉A,这也hi符合我们思考的逻辑的,捕捉错误就是为了进行错误处理,举个例子来说吧。如果现在做一个登陆模块,登陆的错误有账号不存在的异常(UserNameNotExistException),密码不正确的异常(PwdErrorException),还有其他的诸如网络错误的异常等等,这些异常都属于登陆异常(LoginException  这些异常都从这个异常继承),若账号不存在我们就要提示账号不存在,密码错误就提示密码不正确等等。
以楼主说的那样  代码就应该这样写
try {
......
} catch (LoginException e) {
System.out.println("账号登陆出现错误");
} catch (UserNameNotExistException e) {
System.out.println("此账号不存在");
}  catch (PwdErrorException e) {
System.out.println("密码不正确");
}
假设这样行,楼主想下这样符合逻辑吗,无论出现那种错误都只会显示 "账号登陆异常",显然不是我们要的结果,我们想提示的非常具体,首先弱账号不存在提示”此账号不存在“,若密码不正确提示”密码不正确“,其他的未知错误在提示那个”账号登陆出现错误“
所以正确的符合逻辑的写法是
try {
......
} catch (UserNameNotExistException e) {
System.out.println("此账号不存在");
}  catch (PwdErrorException e) {
System.out.println("密码不正确");
} catch (LoginException e) {
System.out.println("账号登陆出现错误");
}
楼主好好体会体会,呵呵,希望能采纳啊 {:soso_e112:}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主分明没有看完
Exception e放在前面,出现的异常Exception e都给捕捉了,那还有FileNotFoundException a什么事啊
Exception e应该放在最后
回复 使用道具 举报
多谢,多谢。
本人的学习方法是看完一个或者几个视频。总结以下,然后在网上找点练习题做,以加深学了的知识。
觉得这个题有点意思,所以将这个题拿来和大家分享一下,
1. 下面这种捕获异常的方式适当么?说明理由
Try{

}catch(Exception e){
..
}catch(FileNotFoundException a){

}



问题已经解决
回复 使用道具 举报
五楼那哥们,怀疑我骗分,,,
我得说两句,技术25分对每个人来说都很重要,,,每个人都想得到,,,我只能说是争取.......不能说是骗?


如果你怀疑我骗分的话,那么我就告诉你,其实每个人都有不劳而获的想法,,每个人心里都有贪心,,,

假如版主直接给你加25分,,,那么你不会说“我不想要吧”  

对于骗分来说,我不解释,但是我不会骗1分,也不会骗2分.............骗一两分...还不够丢人的...........

如果想刷手段骗分的话,  那就骗多点。.....直接骗120分,  不用考试直接进黑马......要么被干掉(这就跟贪官一样,你见有贪一块钱,两块钱的贪官吗,是吧,,哪个贪官不是百万千万以上)



大家看看这个
                  http://bbs.itheima.com/thread-24900-1-1.html             这个哥们非常给力   顶

评分

参与人数 1黑马币 +30 收起 理由
田建 + 30 走自己的路,让别人去说吧。。。.

查看全部评分

回复 使用道具 举报
不可以。
捕获异常一般是先捕捉子异常,再捕捉父类异常。代码会编译报错。
Try{

}catch(FileNotFoundException a){
..
}catch(Exception e){

}
回复 使用道具 举报
马镱洵 发表于 2012-9-5 13:11
向这类问题,自己编译一次就知道可不可以了,所以LZ有骗分嫌疑.

骗分吗? 我能问你 你的29分是哪儿来的吗?据我所知,3天内你涨了20分,而实际加给你的只有7分,真的想知道从何而来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马