黑马程序员技术交流社区

标题: 关于一个异常问题!请各位大侠解惑~~~ [打印本页]

作者: mayor125    时间: 2014-1-7 18:48
标题: 关于一个异常问题!请各位大侠解惑~~~
{: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

作者: tuanjie    时间: 2014-1-7 19:28
你输入的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了
作者: 黄晓鑫    时间: 2014-1-7 22:14
因为你涉及到了算术异常 走的是你的第一个catch 所以发生这个情况
作者: 黄晓鑫    时间: 2014-1-7 22:15
看错了





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