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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mayor125 金牌黑马   /  2014-1-7 18:48  /  1175 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

{:soso_e103:}今天做异常练习题的时候发现了一个问题,此处省略n个字{:soso_e183:}直接贴代码,请各位大侠解惑~~
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 float x = 0.0f;
  6.                 float y = 0.0f;
  7.                 //以下部分可能会产生异常,使用try...catch语句处理。
  8.                 try
  9.                 {
  10.                         String str1 = args[0];
  11.                         String str2 = args[1];
  12.                         x = Float.parseFloat(str1);//将str1转换为普通浮点类型数据。
  13.                         y = Float.parseFloat(str2);//将str2转换为普通浮点类型数据。
  14.                         float temp = x/y; //求两个小数的商。
  15.                         System.out.println("两个小数的商是:"+temp);
  16.                 }
  17.                 catch (NumberFormatException e)
  18.                 {
  19.                         System.out.println("出现了数字格式化异常:"+e);
  20.                 }
  21.                 catch (ArithmeticException e)
  22.                 {
  23.                         System.out.println("出现了算术异常:"+e);
  24.                 }
  25.                 catch (Exception e)
  26.                 {
  27.                         System.out.println("其它异常:"+e);
  28.                 }
  29.         }
  30. }
复制代码
编译:javac ExceptionTest.java

运行:java ExceptionTest 10.0 0.0
运行得到的结果是:两个小数的商是:Infinity


问题:通过翻译得知Infinity是无穷大的意思,按理说如果一个数的值是无穷大,意味着它将占满内容空间,这样肯定是不合理的,也应该会产生异常,但是这里没有报错,给出的结果直接就是“两个小数的商是:Infinity”,各位大神,这是什么情况?有知道的么?{:soso_e163:}{:soso_e163:}{:soso_e163:}......

2014-01-07_184607.jpg (95.71 KB, 下载次数: 9)

2014-01-07_184607.jpg

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

3 个回复

倒序浏览
你输入的str1和str2的值要是整数就会出现算术异常了,首先了解一下整型和浮点型数据,就那int类型和double类型比较,double是浮点型数据,double和float都无法精确地表示一个数据,都是无限接近某个数据,比如double  d = 0.0;并不是表示double的值是0.0,而是无限接近0.0。而int类型可以精确的表示一个数值,int a = 0;表示int类型的a的值就是0。在java中,对于除号"/"运算符,整数相除和小数相除是有区别的,整数相除时只保留整数部分而舍弃小数部分。由于str2的值是0.0,即无穷小,除数无穷小,那计算后的值就无穷大,就会输出Infinity了

评分

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

查看全部评分

回复 使用道具 举报 1 0
因为你涉及到了算术异常 走的是你的第一个catch 所以发生这个情况
回复 使用道具 举报
看错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马