Java术语:为什么编译时错误而不是编译时异常?

时间:2010-05-22 15:21:54

标签: java exception exception-handling

这可能听起来很尴尬......
但我不明白。

为什么我们在java中有 compile-time error 而不是 compile-time exception

我的意思是说我们永远不会说compile-time exception.
我们倾向于将其称为compile-time error

是否有任何具体原因? 欢迎任何建议......

谢谢!

6 个答案:

答案 0 :(得分:10)

原因是异常是在程序执行期间抛出的异常。 Java有一个特定的类型,Exception类。

在编译时,您的代码没有执行,因此它不会抛出异常。实际上,正确执行编译器以查找代码中的错误 - 当然不是例外情况!

答案 1 :(得分:4)

java中的异常与编译错误完全不同。我们没有术语编译时例外。因为异常是发生的事情,你不希望它发生。我们只检查和取消选中了异常。使用已检查的异常<编译时 ,编译器将强制您捕获它,但不是错误。不要抓住它,你不能编译程序,但它不是编译错误。

答案 2 :(得分:3)

错误表示程序存在问题。 异常是一个特定的构造,它会中断程序的控制流,并展开堆栈,捕获有关堆栈状态的信息,以便报告它。

可以使用异常来指示错误,但并非总是如此。例如:

void startOperation() {
 try {
  while (someComplexOperationIsOnGoing()) {
   checkRestart();
  }
 }
 catch (RestartException re) {
  startOperation();
 }
}

void checkRestart() {
 if (shouldRestart()) {
  throw new RestartException();
 }
}

此不完整的代码示例旨在显示异常不是错误的情况。这并非总是最好的做法;但它用于某些情况,其目的是中断程序深处的控制流(例如在Web框架中重定向页面,响应HTTP请求时)并将控制权返回到堆栈的更高级别。术语异常是指中断程序的机制。

在java中,有一个 Exception 类,它封装了这种行为。 错误类也以与异常相同的方式中断控制流;但它仅保留在运行时发生的严重,不可恢复的问题。例如,当JVM内存不足并且无法创建新对象时,会使用它。

答案 3 :(得分:2)

异常是一种可以处理的意外流程。 编译时错误更像无效代码..所以代码甚至没有编译.. 因此,术语“错误”,因为它表示必须修复的更严重的问题。

答案 4 :(得分:1)

编译时间错误是指导软件无法按照指示创建的结果。例如:

String myString = new ButtonEvent();

是编译时错误。虽然在软件处理过程中会出现例外情况。

try{
    while( file.readNextLine() != file.EOF ){
    }
}
catch( UnopenedException ex ){
}

在这里,我们假设文件可以正确打开并且已经存在。例外情况是那些没有打开文件的“例外”情况。

答案 5 :(得分:0)

异常是可以在软件逻辑中处理的错误的特定名称。错误只是错误,或者是错误的代码。