2012-02-27 160 views
29

在上ploymorphism我教授的幻灯片之一,我看到这一段代码与一对夫妇的意见:运行时错误和编译器错误有什么区别?

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

正如你所看到的,它说,在第一次铸造说法,这会产生运行 - 时间错误,在另一个它说它会产生编译器错误

是什么导致这些错误?以及它们如何彼此不同?

+28

加油吧。这家伙正在努力学习,downvotes是不必要的。 – JohnFx 2012-02-27 20:35:54

+4

如果它解决了我的例子并不重要,真正重要的是我清楚地得到了答案。那个人用简单的方式解释了它,这对我这样的天真的程序员来说很容易理解。 – AbdullahR 2012-02-27 20:54:58

+0

您是否阅读过http://stackoverflow.com/faq? – 2012-02-27 21:00:55

回答

33

运行时错误。 这些是最困难的 - 并且会导致代码中的程序崩溃和错误,这些错误很难追踪到。

一个例子可能会试图将一个字符串转换:“你好”到一个整数:

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

编译器可能不认为这是一个问题,但运行时错误将被抛出。

编译器错误是由于代码中的错误,编译器抛出错误以提醒您某些无法编译的错误,因此无法运行。

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

int = "this is not an int"; 

希望有所帮助。

0

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

编译时错误是防止Java程序编译像一个语法错误,一类没有发现任何类型的错误,一个错误的文件已定义类的名称,混合不同java数据类型时可能会失去精度等等。

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

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

+2

-1他没有使用谷歌 - 他在这里问。至少将你粘贴的文字粘贴到他的例子中。 – 2012-02-27 20:55:37

+0

现在使用Google链接... haha​​ – 2016-08-16 23:38:29

11

运行时错误。当您尝试编译代码时发生编译器错误。

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

如果您编译并运行代码,但在执行过程中失败,那就是运行时。

+1

在您的示例中,“discountVariable”的声明类型为“DiscountSale”,“saleVariable”为另一种类型。当您尝试使用'discountVariable = saleVariable'行将另一个赋值给另一个时,这会导致编译器错误。如果你把演员放在'(DiscountSale)'位置,这就告诉编译器它没问题。当它运行时它会中断,因为'saleVariable'实际上不是'DiscountSale'类型。 – 2012-02-27 20:52:51

+1

+1,因为这是问题的最简单的最佳答案:运行时错误和编译器错误有什么区别?但是,如果答案实际上解决了OP提供的具体示例,我会更加高兴。 – 2012-02-27 20:54:34

1

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

您正在将salesVariable中的所有内容强制转换为DiscountSale类型,这被认为是不安全的,并且只有在运行时才能被评估。

+0

不是+1,因为“编译器不知道saleVariable的对象类型”。这不是真的。编译器知道这种类型 - 它只是与DiscountSale不兼容。 – 2012-02-27 20:57:27

+0

你的权利,我只是想在这个背景下,如果他在晚会上做了类似e.DataItem – bigamil 2012-02-28 14:27:00

2

编译时错误意味着编译器知道discountVariable = saleVariable必须以分号结尾,如下所示discountVariable = saleVariable;因此编译代码时会引发错误。

运行时错误意味着错误将在运行时发生,因为即使您将saleVariable转换为discountVariable,由于类型不同,转换也无法执行。

5

编译时间错误引用语法和语义。例如,如果您执行涉及不同类型的操作。例如:用int添加一个字符串,或者用一个真正的字符串来分隔字符串。 (请阅读最后一段!!!)

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

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

参考此链接太:当代码实际运行时,才会发生Runtime vs Compile time

1

认为你已经得到了有什么区别的一般说明。特别是在你的代码显示在OP,

  • 在第二份声明,编译器就比较LHS和RHS的类型,发现没有隐式转换可能因此它给人的错误。
  • 编译器认为第一条语句是相同的,但是这里程序员明确地转换了类型,这跟告诉编译器一样好,我知道我在做什么,当然编译器信任你并且不会给你任何错误。
+0

+1的事情,但这很有帮助 – 2012-02-27 20:56:16

0

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

例如: - 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/AB将导致除以零,直到执行

0

编译/编译时间/语法/语义错误:编译或编译时错误的发生是由于打字错误错误,如果我们不遵循任何编程语言的正确语法和语义,然后编译器会抛出编译时错误。他们不会让你的程序执行一行代码,直到你删除了所有的语法错误,或者直到你调试了编译时错误。
示例:缺少C中的分号或模糊intInt

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

了解更多关于这里所有programming errors

2

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

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

相关问题