为什么Java的double类型的两个参数相除时,分母为零也可以计算

为什么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;
    }
}



img

请问有什么底层原理吗?

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)会抛出此异常,被除数为整形时不可以为零。
解决办法:检查被除数的类型并更改。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^