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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-16 19:58  /  1202 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ExceptionTest {
   public static int Sum(int n){
   if(n<0)
   throw new IllegalArgumentException("n应该为整数");
  int s=0;
  for(int i=0;i<=n;i++) s+=i;
  return s;
}
public static void main(String args[]){
  try{
   int n=Integer.parseInt(args[0]);
   System.out.println(Sum(n));
  }
  catch(ArrayIndexOutOfBoundsException e){
   System.out.println("命令行为:"+"javaException3<number>");
  }
  catch(NumberFormatException e2){System.out.println("参数<number>应为整数!");}
  catch(IllegalArgumentException e3){System.out.println("错误参数:"+e3.toString());}
  finally{System.out.println("程序结束");}
}

}

在myeclipse中直接运行的话
输出为:java Exception3<number>
程序结束


如果加上main方法的参数运行
比如 -4
输出为: 参数错误:java.long.IllegalAgumentException:n 应该为整数!
程序结束
可是程序运行时 为什么抛出和捕获异常根本不起作用

评分

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

查看全部评分

3 个回复

倒序浏览
System.out.println("命令行为:"+"javaException3<number>");    引号
回复 使用道具 举报
首先, 你定义的sum方法的名字首字母应该是小写, 你抛出的异常被捕获到了

1. 因为主方法要从命令行接收一个参数, 如果你没有在传入参数, 会执行下面这条catch语句
catch(ArrayIndexOutOfBoundsException e){
   System.out.println("命令行为:"+"javaException3<number>");
  }
输出结果是:
命令行为:javaException3<number>
程序结束

2. 如果你传入一个负数, 会执行你在sum中抛出的异常
if (n < 0)
   throw new IllegalArgumentException("n应该为整数");
下面的catch处理这个异常
catch (IllegalArgumentException e3) {
   System.out.println("错误参数:" + e3.toString());
输出结果是:
错误参数:java.lang.IllegalArgumentException: n应该为整数
程序结束

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
如果问题已解决请再次编辑,改为以解决,方便大家看帖,没有就继续追问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马