夜还没黑
2016-06-04 14:29
package com.test;
public class ThrowException {
public static void main(String[] args) {
ThrowException t=new ThrowException();
float result=t.divide();
System.out.println("结果:"+result);
}
public float divide(){
float result=100;
float divider=10;
try {
while(divider>0){
divider--;
result+=100/divider;
}
return result;
} catch (Exception e) {
System.out.println("错误");
return -1;
}
}
}
计算机的小数表示不是准确的,float和double类型的数都是近似的,当上面减到float为0时,其实际并不完全等于0,所以没有异常,且数字很小约为0,100/divider就为无穷
给你看两张图片
你这个程序本身就没有会出现错误的地方啊,
try {
while(divider>0){
divider--;
result+=100/divider;
}
try块里面可能出现错误的地方就是divider=0,但代码写的是先判断再自减,因此divider最后一次取值就是1,循环就结束了,因此没有错误可捕获,当然就不会报错了。
数据类型在这里也不会改变运行结果的,只会改变显示的结果,
float result=t.divide(); 这时会显示infinity,因为除不尽所以算是无穷
假如改成了 int result = (int)t.divide(); 这时结果显示的就不是infinity了,会显示一个确定的数。
因此数据类型不会影响try catch块。 真正能否捕获到异常是看是否有异常
Java入门第三季
409768 学习 · 4463 问题
相似问题