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

时间:2012-02-27 20:31:15

标签: java compiler-errors

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

discountVariable =              //will produce
  (DiscountSale)saleVariable;//run-time error
discountVariable = saleVariable //will produce
                                //compiler error

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

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

10 个答案:

答案 0 :(得分:42)

运行时错误仅在代码实际运行时发生。 这些是最困难的 - 并导致程序崩溃和代码中的错误很难追踪。

示例可能是尝试将字符串:“hello”转换为整数:

string helloWorld = "hello";
int willThrowRuntimeError = Convert.ToInt32(helloWorld);

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

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

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

int = "this is not an int";

希望有所帮助。

答案 1 :(得分:14)

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

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

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

答案 2 :(得分:8)

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

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

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

也请参阅此链接:Runtime vs Compile time

答案 3 :(得分:2)

编译时间错误意味着编译器知道discountVariable = saleVariable必须以discountVariable = saleVariable;下面的分号结尾,因此在编译代码时会抛出错误。

运行时错误意味着错误将在运行时发生,因为即使您将saleVariable强制转换为discountVariable,强制转换也无法获取,因为它们的类型不同。

答案 4 :(得分:2)

认为你已经得到了有关差异的一般说明。特别是在OP中显示的代码中,

  • 在第二个语句中,编译器比较了LHS和RHS上的类型,发现没有隐式转换,因此它给出了错误。
  • 编译器看到第一个语句是相同的,但是这里程序员显式地转换了类型,这和告诉编译器我知道我在做什么一样好,当然编译器信任你并且没有错误。< / LI>

答案 5 :(得分:2)

编译时错误是语法和语义的错误。

运行时错误主要是逻辑错误。由于程序员忽略了某些东西,程序崩溃,例如除以0,访问变量而不先将其初始化等。

答案 6 :(得分:1)

如果你使用谷歌,你会得到这个:

  

编译时错误是任何类型的错误,它会阻止java程序编译,如语法错误,找不到类,定义类的错误文件名,混合不同java数据类型时可能会丢失精度等等。

     

运行时错误表示程序运行时发生的错误。为了处理这种错误,java定义了Exceptions。异常是对象表示程序流程中的异常情况。它可以选中也可以不选中。

http://wiki.answers.com/Q/Difference_between_run_time_error_and_compile_time_error_in_java

答案 7 :(得分:1)

这是因为编译器不知道“saleVariable”的对象类型,直到程序运行时实际设置了该值。

你强迫salesVale中的任何东西进入类型DiscountSale,这被认为是不安全的,直到运行时才能评估。

答案 8 :(得分:0)

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

Ex: - MethodOverloading

class OverloadingTest {
    void sum(int a, long b) {
        System.out.println("a method invoked");
    }

    void sum(long a, int b) {
        System.out.println("b method invoked");
    }

    public static void main(String args[]) {
        OverloadingTest obj = new OverloadingTest();
        obj.sum(200, 200);// now ambiguity
    }
}

运行时错误是程序执行时检测到的错误。例如,除以零。在执行

之前,编译器无法知道操作x / a-b是否会导致除以零

答案 9 :(得分:0)

编译/编译时间/语法/语义错误:编译或编译时错误是由于输入错误导致的错误,如果我们不遵循任何编程语言的正确语法和语义然后编译时间编译器抛出错误。在删除所有语法错误或调试编译时错误之前,他们不会让程序执行单行 示例:在C中缺少分号或将int误导为Int

运行时错误:运行时错误是程序处于运行状态时生成的错误。这些类型的错误将导致程序出现意外行为或甚至可能导致程序中断。它们通常被称为例外 示例:假设您正在读取不存在的文件,将导致运行时错误。

详细了解此处的所有programming errors