黑马程序员技术交流社区

标题: 异常的问题 [打印本页]

作者: 郑强强    时间: 2012-4-10 22:15
标题: 异常的问题
public class a15
{
public static void main(String[] args)
{
int arr[]={4,12,87,21,6,18};
int den[]={2,0,7,0,61,0};
double sum=0.0;
for(int i=0;i<=6;i++)
{
/*if((den[i]==0)||(i>den.length-1))
{
System.out.println("程序执行有误");
break;
}
else
{
sum+=(double)arr[i]/den[i];
System.out.println("sum="+sum);
}*/
try
{
sum+=(double)arr[i]/den[i];
System.out.println("sum="+sum);
}
catch(ArithmeticException e)
{
System.out.println("除数为0");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("超出数组大小");
}

}
System.out.println("Hello World!");
}
}

在网上偶然看到的程序,为什么除数为0时,没有抛出异常,自己没有想明白??各位大虾看看吧
作者: 未长法    时间: 2012-4-10 22:51
ArithmeticException 和ArithmeticException  都是RuntimeException 的子类,可以不抛出异常。如果出现不错,程序将停止,让你修改。
异常有两种:
        编译时被检测异常
                该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
                该异常被标识,代表这可以被处理。
        运行时异常(编译时不检测)(RuntimeException 及其子类)
                在编译时,不需要处理,编译器不检查。
                该异常的发生,建议不处理,让程序停止。需要对代码进行修正。
作者: 莫运飞    时间: 2012-4-10 23:55
class a15
{
public static void main(String[] args)
{
int arr[]={4,12,87,21,6,18};
int den[]={2,0,7,0,61,0};
double sum=0.0;
for(int i=0;i<=6;i++)
{
/*if((den==0)||(i>den.length-1))
{
System.out.println("程序执行有误");
break;
}
else
{
sum+=(int)arr/den;
System.out.println("sum="+sum);
}*/
try
{
sum+=(int)arr/den;
System.out.println("sum="+sum);
}
catch(ArithmeticException e)
{
System.out.println("除数为0");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("超出数组大小");
}

}
System.out.println("Hello World!");
}
}

你用的是double型,算出的是无穷大,是不会抛异常的,你把 double改成int 就会马上抛异常了。
作者: 胡元    时间: 2012-4-11 12:05
楼上真是一针见血!




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