黑马程序员技术交流社区
标题:
关于一个异常问题!请各位大侠解惑~~~
[打印本页]
作者:
mayor125
时间:
2014-1-7 18:48
标题:
关于一个异常问题!请各位大侠解惑~~~
{:soso_e103:}今天做异常练习题的时候发现了一个问题,此处省略n个字{:soso_e183:}直接贴代码,请各位大侠解惑~~
class ExceptionTest
{
public static void main(String[] args)
{
float x = 0.0f;
float y = 0.0f;
//以下部分可能会产生异常,使用try...catch语句处理。
try
{
String str1 = args[0];
String str2 = args[1];
x = Float.parseFloat(str1);//将str1转换为普通浮点类型数据。
y = Float.parseFloat(str2);//将str2转换为普通浮点类型数据。
float temp = x/y; //求两个小数的商。
System.out.println("两个小数的商是:"+temp);
}
catch (NumberFormatException e)
{
System.out.println("出现了数字格式化异常:"+e);
}
catch (ArithmeticException e)
{
System.out.println("出现了算术异常:"+e);
}
catch (Exception e)
{
System.out.println("其它异常:"+e);
}
}
}
复制代码
编译: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-1-7 18:48 上传
作者:
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