黑马程序员技术交流社区

标题: 刚看完异常视屏,有点疑问 [打印本页]

作者: 杨千里    时间: 2012-9-5 10:55
标题: 刚看完异常视屏,有点疑问
请问用这种格式:

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

来捕获异常,可以吗?



作者: 彭润生    时间: 2012-9-5 11:27
这样不可以,有多个catch块中前面的异常不能是后面的父类
这样就可以了
try{}
catch(FileNotFoundException a){}
catch(Exception e){}
这样就可以了
作者: 王宝龙    时间: 2012-9-5 12:19
如果里面有父类异常比如你那里的
catch(Exception e)这个异常一定要放到子类异常
catch(FileNotFoundException a)的后面。
如果有多个异常类一定要将父类异常放在所有子类异常的后面。

作者: 舒远    时间: 2012-9-5 13:02
这样编译是不会通过的。第一个异常捕获的是Exception,第二个异常捕获的是Exception的子类,编译器会认为所有的异常都被第一个捕获了。那么第二个捕获异常的语句将永远得不到执行,这样编译就不会通过,正确做法是将子类异常捕获语句写在父类异常捕获语句的前面。逻辑上才是合理的。
作者: AngieFans85    时间: 2012-9-5 13:11
向这类问题,自己编译一次就知道可不可以了,所以LZ有骗分嫌疑.
作者: 佟亚鹏    时间: 2012-9-5 13:14
这样是不可以的,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:}
作者: 王陶成    时间: 2012-9-5 13:22
楼主分明没有看完
Exception e放在前面,出现的异常Exception e都给捕捉了,那还有FileNotFoundException a什么事啊
Exception e应该放在最后
作者: 杨千里    时间: 2012-9-5 13:42
多谢,多谢。
本人的学习方法是看完一个或者几个视频。总结以下,然后在网上找点练习题做,以加深学了的知识。
觉得这个题有点意思,所以将这个题拿来和大家分享一下,
1. 下面这种捕获异常的方式适当么?说明理由
Try{

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

}



问题已经解决
作者: 杨千里    时间: 2012-9-5 14:18
五楼那哥们,怀疑我骗分,,,
我得说两句,技术25分对每个人来说都很重要,,,每个人都想得到,,,我只能说是争取.......不能说是骗?


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

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

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

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



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


作者: 王振    时间: 2012-9-5 14:46
不可以。
捕获异常一般是先捕捉子异常,再捕捉父类异常。代码会编译报错。
Try{

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

}

作者: 杨卓儒    时间: 2012-9-7 01:05
马镱洵 发表于 2012-9-5 13:11
向这类问题,自己编译一次就知道可不可以了,所以LZ有骗分嫌疑.

骗分吗? 我能问你 你的29分是哪儿来的吗?据我所知,3天内你涨了20分,而实际加给你的只有7分,真的想知道从何而来




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