黑马程序员技术交流社区

标题: 异常问题,与想象的偏离.. [打印本页]

作者: 章闽    时间: 2012-10-17 19:56
标题: 异常问题,与想象的偏离..
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 应该为整数!
程序结束
可是程序运行时 抛出和捕获异常根本不起作用*/
作者: 王威    时间: 2012-10-17 20:27
本帖最后由 王威 于 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 应该为整数!
程序结束  






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