运行时错误和编译器错误有什么区别?

Abd*_*ahR 47 java compiler-errors

在我关于ploymorphism的一篇教程幻灯片中,我看到这段代码有几条评论:

discountVariable =              //will produce
  (DiscountSale)saleVariable;//run-time error
discountVariable = saleVariable //will produce
                                //compiler error
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它在第一个演示语句中表示它将产生运行时错误,而在另一个演示语句中它表示它将产生编译器错误.

是什么造成这些错误?以及他们彼此之间的差异?

DIX*_*WDD 45

只有在代码实际运行时才会出现运行时错误.这些是最困难的 - 并导致程序崩溃和代码中的错误,很难追查.

一个例子可能是尝试将字符串:"hello"转换为整数:

string helloWorld = "hello";
int willThrowRuntimeError = Convert.ToInt32(helloWorld);
Run Code Online (Sandbox Code Playgroud)

编译器可能不会将此视为问题,但在运行时将抛出错误.

编译器错误是由于代码中的不准确造成的,编译器会抛出错误来提醒您无法编译的内容,因此无法运行.

编译器错误的一个例子是:

int = "this is not an int";
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Jam*_*gne 14

在程序运行期间发生运行时错误.尝试编译代码时发生编译器错误.

如果您无法编译代码,那就是编译器错误.

如果编译并运行代码,但在执行期间失败,那就是运行时.

  • 在您的示例中,`discountVariable` 的声明类型为 `DiscountSale`,而 `saleVariable` 是另一种类型。当您尝试使用“discountVariable = saleVariable”行将一个值分配给另一个时,这会导致编译器错误。如果你把演员表放在`(DiscountSale)`,这会告诉编译器它没问题。然后当你运行它时它会中断,因为 `saleVariable` 实际上不是 `DiscountSale` 类型。 (2认同)
  • +1 因为这是对这个问题最简单的最佳答案:运行时错误和编译器错误有什么区别?但是,如果答案实际上解决了 OP 提供的具体示例,我会更高兴。 (2认同)

Kan*_*ani 8

编译时错误是指语法和语义.例如,如果您执行涉及不同类型的操作.例如:添加带有int的字符串,或者将字符串除以real.(阅读最后一段!!!)

运行时错误是程序执行时检测到的错误.例如,除以零.在执行之前,编译器无法知道操作x/ab是否会导致除零.

这是一个非常广泛的解释.有许多智能编译器,并且还可以在不同类型之间进行内部投射,从而实现有意义的操作.即使代码未执行,也可以预编译代码并查看一些运行时错误.

请参阅此链接:运行时与编译时间