gpt4 book ai didi

java - 它们是异常而不是 Java 中的编译错误。为什么?

转载 作者:行者123 更新时间:2023-12-02 11:10:43 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Java - When is it a compiler error and when is it a runtime exception?

(3 个回答)


7年前关闭。




抱歉英语不好。
显然,除以零总是未定义的。那么为什么这是运行时的异常呢?为什么这不是编译错误?除以零的结论在运行时不变。它与文件未找到异常之类的东西不同,后者将在执行后确定。

        System.out.println(1/0);

另一个例子 :
        Person firstPerson = (Person) new Object();

编译器允许父子转换,但它在运行时抛出异常。

最佳答案

编译器通常只检查语法错误,而不是语义错误。这些都是语义错误。您的两个代码行的语法看起来都很好。您将两个整数相除,然后将一个对象转换为另一种类型。两者都是语法级别的有效操作。实际错误是由语义引起的(不能除以 0/您尝试转换的对象不是 Person 的子类型的实例)。并考虑以下代码:

class AnObject{
public AnObject(){
divide7(0);
}

public int divide7(int i){
return (7 / i);
}
}

它将 7 除以 0,但如果这是编译时错误,编译器将非常低效,因为他们必须每次都检查完整的代码(每条路径)。有时输入是未知的(例如来自服务器/用户的输入)。

关于java - 它们是异常而不是 Java 中的编译错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29563131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com