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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章闽 中级黑马   /  2012-10-17 19:56  /  1596 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Exception3 {
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("程序结束");}
}
}/*如果运行改程序的命令行输入为:java Exception3
  屏幕显示为:java Exception3<number>
程序结束
如果命令行输入为:java Exception3 -4
屏幕显示为:
参数错误:java.long.IllegalAgumentException:n 应该为整数!
程序结束
可是程序运行时 抛出和捕获异常根本不起作用*/

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
本帖最后由 王威 于 2012-10-17 20:29 编辑

你这里异常起了作用的
1、当你在命令行输入 java Exception3  也就是运行文件的时候,
执行 int n=Integer.parseInt(args[0]);的时候 args[0] 没有内容,肯定会抛数组越界异常,因为你进行了捕捉
所以执行 catch(ArrayIndexOutOfBoundsException e) 里面的内容:System.out.println("命令行为:"+"javaException3<number>");
然后,执行finally里面的内容,所以输出“程序结束”!
所以当你命令行输入java Exception3 时会输出:
java Exception3<number>
程序结束
2、当你输入java Exception3  -4 时,在你使用-4作为参数时,执行到Sum(int n)方法时,因为n<0
所以程序会抛出 IllegalArgumentException 异常,而正好你在下面对该异常进行了捕捉,所以会执行 catch(IllegalArgumentException e3)
System.out.println("错误参数:"+e3.toString()); 这一句,打印出:java.long.IllegalAgumentException:n 应该为整数!
最后执行finally里面内容,输出“程序结束”
所以当你命令行输入 java Exception3 -4 时会输出:
java.long.IllegalAgumentException:n 应该为整数!
程序结束  

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马