【问题标题】:They are exception instead of compile error in Java.why? [duplicate]它们是异常而不是 Java 中的编译错误。为什么? [复制]
【发布时间】:2015-04-10 13:46:52
【问题描述】:

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

        System.out.println(1/0);

另一个例子:

        Person firstPerson = (Person) new Object();

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

【问题讨论】:

标签: java exception compiler-errors


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    编译器不会经常检查程序中的异常。这通常是因为程序员会知道他们的程序会抛出的任何异常(例如调用未定义的项目并获得抛出的 NullPointerException/IOException,他们应该捕获以保持程序运行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 2011-03-11
      • 2019-12-12
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多