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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵卓辉 中级黑马   /  2014-3-1 23:09  /  954 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何伟超 于 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(无穷大)


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

正序浏览
李白衣 发表于 2014-3-2 10:08
double c=(double)a/b;
这是将a和b都转换为浮点数在运行。
两个不同类型的数作运算,以取值范围大的类型为 ...

:handshake
回复 使用道具 举报
赵卓辉 发表于 2014-3-2 08:42
我的问题是 第8行和第9行为什么打印的是Infinity,而不是 ArithmeticException

因为第8行也异常了啊,返回的是才会是infinity。
回复 使用道具 举报
double c=(double)a/b;
这是将a和b都转换为浮点数在运行。
两个不同类型的数作运算,以取值范围大的类型为标准,
且在Java中,浮点数有无限值和NaN的概念,
所以上述表达式不会抛出ArithmeticException异常,
而是输出Infinity。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 2 0
还是回去火星吧 发表于 2014-3-2 02:21
看你的提示,算术异常,第10行。
毕姥爷说过,被除数不能为0,你的b的值为0了。 ...

我的问题是 第8行和第9行为什么打印的是Infinity,而不是 ArithmeticException
回复 使用道具 举报
luoanjade 发表于 2014-3-1 23:46
他不是给你提示,第10行代码有问题吗,
第十行是:int c1=a/b;
你看到上面a ,b的初期值了没?b是0,分母 ...

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

回复 使用道具 举报
看你的提示,算术异常,第10行。
毕姥爷说过,被除数不能为0,你的b的值为0了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
他不是给你提示,第10行代码有问题吗,
第十行是:int c1=a/b;
你看到上面a ,b的初期值了没?b是0,分母为零了
所以报异常了!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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