黑马程序员技术交流社区

标题: ArithmeticException的问题 [打印本页]

作者: 赵卓辉    时间: 2014-3-1 23:09
标题: ArithmeticException的问题
本帖最后由 何伟超 于 2014-3-2 10:56 编辑
  1. package test014.zzh.bean;

  2. public class ExceptionTest {        
  3.         public static void main(String args[])throws Exception{
  4.                 try{
  5.                 int a=Integer.parseInt("1");
  6.                 int b=Integer.parseInt("0");
  7.                 double c=(double)a/b;
  8.                 System.out.println(c);
  9.                 int c1=a/b;
  10.                 System.out.println(c1);
  11.                 }catch(NumberFormatException e){
  12.                         e.printStackTrace();
  13.                 }catch(ArithmeticException e){
  14.                         //System.out.println("kankan");
  15.                         e.printStackTrace();
  16.                 }
  17.                 finally{
  18.                         //System.out.println("总会执行");
  19.                 }
  20.         }
  21. }
复制代码

请问为什么打印结果为:
Infinity
java.lang.ArithmeticException: / by zero
at test014.zzh.bean.ExceptionTest.main(ExceptionTest.java:10)

麻烦各位帮我解释一下,上面为什么没有出现异常而是打印了Infinity(无穷大)



作者: luoanjade    时间: 2014-3-1 23:46
他不是给你提示,第10行代码有问题吗,
第十行是:int c1=a/b;
你看到上面a ,b的初期值了没?b是0,分母为零了
所以报异常了!
作者: 还是回去火星吧    时间: 2014-3-2 02:21
看你的提示,算术异常,第10行。
毕姥爷说过,被除数不能为0,你的b的值为0了。
作者: 赵卓辉    时间: 2014-3-2 08:39
luoanjade 发表于 2014-3-1 23:46
他不是给你提示,第10行代码有问题吗,
第十行是:int c1=a/b;
你看到上面a ,b的初期值了没?b是0,分母 ...

第十行有算术异常我知道,我就是故意测试这个异常。我的问题是 第8行和第9行为什么打印的是Infinity,而不是 ArithmeticException


作者: 赵卓辉    时间: 2014-3-2 08:42
还是回去火星吧 发表于 2014-3-2 02:21
看你的提示,算术异常,第10行。
毕姥爷说过,被除数不能为0,你的b的值为0了。 ...

我的问题是 第8行和第9行为什么打印的是Infinity,而不是 ArithmeticException
作者: 李白衣    时间: 2014-3-2 10:08
double c=(double)a/b;
这是将a和b都转换为浮点数在运行。
两个不同类型的数作运算,以取值范围大的类型为标准,
且在Java中,浮点数有无限值和NaN的概念,
所以上述表达式不会抛出ArithmeticException异常,
而是输出Infinity。
作者: 还是回去火星吧    时间: 2014-3-2 10:33
赵卓辉 发表于 2014-3-2 08:42
我的问题是 第8行和第9行为什么打印的是Infinity,而不是 ArithmeticException

因为第8行也异常了啊,返回的是才会是infinity。
作者: 赵卓辉    时间: 2014-3-2 11:40
李白衣 发表于 2014-3-2 10:08
double c=(double)a/b;
这是将a和b都转换为浮点数在运行。
两个不同类型的数作运算,以取值范围大的类型为 ...

:handshake




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