为什么Java的double类型的两个参数相除时,分母为零也可以计算
我调试了一下,分母为零的时候没有进入输入异常错误,就直接进入cal方法了
package Homework_No01;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Homework01 {
public static void main(String[] args) {
double n1,n2;
double res;
Scanner scanner = new Scanner(System.in);
try {
n1=scanner.nextDouble();
n2=scanner.nextDouble();
res=cal(n1,n2);
System.out.println(res);
} catch (InputMismatchException e) {
System.out.println("输入异常");
}
catch (ArithmeticException e){
System.out.println("分母不能为零");
}
System.out.println("程序退出");
}
public static double cal(double n1,double n2){
return n1/n2;
}
}
请问有什么底层原理吗?
Java float和double类型,就像其他任何语言(以及几乎任何硬件FP单元)一样,实现了浮点数学的IEEE 754标准,它要求除以零以返回特殊的“无穷大”值。抛出异常实际上会违反该标准。整数算术(由Java和大多数其他语言和硬件实现为二进制补码表示)是不同的,没有特殊的无穷大或NaN值,因此抛出异常是一种有用的行为。
参考 https://m.imooc.com/wenda/detail/587444
参考下:http://t.csdn.cn/bInTQ
Java 异常的基类是 Throwable 类型,然后它有两个子类 Error(错误)和 Exception()类型,然后 Exception 类又分为运行时异常(RuntimeException)及非运行时异常(编译异常)
RuntimeException 及其子类都统称为运行时异常,例如:NullPointExecrption(空指针)、ArithmeticException(算术错误)、ArrayIndexOutOfBoundsException(数组越界)等。
【异常名称如下:java.lang._ArithmeticException_: / by zero
原因:当我们定义的被除数为整形时候(short int long)会抛出此异常,被除数为整形时不可以为零。
解决办法:检查被除数的类型并更改。】