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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余威宏 中级黑马   /  2013-5-22 12:30  /  1830 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余威宏 于 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 13:32

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 袁梦希 于 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;
复制代码

点评

权限大了就是不好啊,回答正确就木人给你加分  发表于 2013-5-22 23:46

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 谁说没有,这不是还有我嘛

查看全部评分

回复 使用道具 举报
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:32

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
看来楼主对异常机制,还不太清楚,我稍加说明
你编译不通过的原因是:
因为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:32

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
嗯,明白了,谢谢楼上各位的细心解答!!
回复 使用道具 举报
袁梦希 发表于 2013-5-22 12:45
一眼望去你的程序,应该是异常那里有问题,捕获异常的时候如果有多个catch块,那么应该把父类异常放在后面 ...


嗯,明白了,继续努力吧:lol
回复 使用道具 举报
余威宏 发表于 2013-5-22 13:49
嗯,必须的,会继续努力滴

问题非常好,敢于提问你就是王者
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马