黑马程序员技术交流社区

标题: 问一个try catch 的问题 [打印本页]

作者: 余威宏    时间: 2013-5-22 12:30
标题: 问一个try catch 的问题
本帖最后由 余威宏 于 2013-5-22 13:51 编辑

class ExceptionTest2{   
public static void main(String[] args){     
  int a=0;   
  try{      
a = Integer.parseInt(args[0]);  
  }     
catch(Exception e){   
   a = 1;   
}     
catch(NumberFormatException e){     
a = 2;   
}   
}  
}
这个程序编译的时候老出错,请帮忙分析一下为什么会出错,应该如何正确修改呢?
作者: 袁梦希    时间: 2013-5-22 12:45
本帖最后由 袁梦希 于 2013-5-22 12:47 编辑

一眼望去你的程序,应该是异常那里有问题,捕获异常的时候如果有多个catch块,那么应该把父类异常放在后面,
这就是所说的把大的异常放在后面的原因,也就是说把Exception e和NumberFormatException e调换一下位置试试。
不行再回帖,我开eclipse帮你运行一下。
  1. catch(NumberFormatException e){
  2. a = 1;
  3. }
  4. catch(Exception e){
  5. a = 2;
复制代码

作者: tshch1989    时间: 2013-5-22 12:55
public class ExceptionTest2 {

        /**
         * @param args
         */
        public static void main(String[] args){
                int a=0;
                try{
                a=Integer.parseInt(args[0]);
                }catch(NumberFormatException e){
                        a=2;
                }finally{
                        System.out.println(a);
                }       
        }
}
这是我写的你参考一下,捕捉异常的时候,要不最具体的catch放在上面,
作者: 谢孔营    时间: 2013-5-22 13:19
看来楼主对异常机制,还不太清楚,我稍加说明
你编译不通过的原因是:
因为catch(Exception)会捕捉一切异常,包括NumberFormatExceptio 类型转换异常,当
这个catch扑捉到异常后,除了执行finally{}中的代码块后,其他代码不会执行,也就是第二个catch(NumberFormatException e)
永远不会得到执行,这样编译不会通过
所以以后写catch()时,范围小的写在上面。这样上面的catch捕捉不到,可以向下继续寻找。
最后写finlly{}
finlly{}是必须执行的代码块,一般用于释放资源,包括关闭数据库了,等等吧
class ExceptionTest2{   
public static void main(String[] args){     
   int a=0;   
   try{      
a = Integer.parseInt(args[0]);  
   }      
catch(NumberFormatException e){     
a = 2;   
}
catch(Exception e){   
    a = 1;   
}
finally{
//必须执行的代码
}     
}  
}
作者: 余威宏    时间: 2013-5-22 13:48
嗯,明白了,谢谢楼上各位的细心解答!!
作者: 余威宏    时间: 2013-5-22 13:49
袁梦希 发表于 2013-5-22 12:45
一眼望去你的程序,应该是异常那里有问题,捕获异常的时候如果有多个catch块,那么应该把父类异常放在后面 ...


嗯,明白了,继续努力吧:lol
作者: 袁梦希    时间: 2013-5-22 13:50
余威宏 发表于 2013-5-22 13:49
嗯,必须的,会继续努力滴

问题非常好,敢于提问你就是王者




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