web-dev-qa-db-ja.com

実行時エラーとコンパイラエラーの違いは何ですか?

多態性に関する私の教授スライドの1つで、このコードの一部にいくつかのコメントが付いています。

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

ご覧のとおり、最初のキャスト文ではrun-timeエラーが発生し、もう1つのキャスト文ではcompiler errorが発生します。

これらのエラーの原因は何ですか?そして、それらはどのように互いに異なっていますか?

46
AbdullahR

実行時エラーは、コードが実際に実行されている場合にのみ発生します。これらは最も困難なものであり、プログラムのクラッシュやコードのバグにつながり、追跡が困難になる可能性があります。

例として、文字列「hello」を整数に変換しようとする場合があります。

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

コンパイラーはこれを問題とは見なさないかもしれませんが、実行するとエラーがスローされます。

コンパイラエラーは、コードの不正確さが原因で発生します。この場合、コンパイラはエラーをスローして、コンパイルできないため実行できないエラーを警告します。

コンパイラエラーの例は次のとおりです。

int = "this is not an int";

お役に立てば幸いです。

42
DIXONJWDD

プログラムの実行中に実行時エラーが発生します。コードをコンパイルしようとすると、コンパイラエラーが発生します。

コードをコンパイルできない場合、それはコンパイラエラーです。

コードをコンパイルして実行しても、実行中に失敗した場合、それはランタイムです。

14
James Montagne

コンパイル時エラーは構文とセマンティクスを指します。たとえば、さまざまなタイプを含む操作を行う場合。例:文字列にintを追加するか、文字列を実数で除算します。 (最後の段落を読んでください!!!)

実行時エラーは、プログラムの実行時に検出されるエラーです。たとえば、ゼロによる除算。コンパイラーは、操作x/a-bが実行されるまでゼロによる除算につながるかどうかを知ることができません。

これは非常にbroadの説明です。多くのスマートコンパイラがあり、また、さまざまなタイプ間で内部キャストを実行して、意味のある操作を行うことができます。コードがプリコンパイルされ、コードが実行されない場合でも、いくつかの実行時エラーを確認できます。

このリンクも参照してください: ランタイムvsコンパイル時間

8
Kani

違いが何であるかについての一般的な説明を既に入手していると思います。特に、OPで示したコードでは、

  • 2番目のステートメントでは、コンパイラーはLHSとRHSの型を比較し、暗黙的なキャストができないことを検出してエラーを返します。
  • コンパイラーは最初のステートメントも同じように見えますが、ここではプログラマーが明示的に型をキャストします。
2
Kashyap

コンパイル時エラーは、discountVariable = saleVariableが次のようにセミコロンで終了しなければならないことをコンパイラが認識していることを意味しますdiscountVariable = saleVariable;so.

実行時エラーとは、saleVariableをdiscountVariableにキャストしている場合でも、型が異なるためキャストできないため、実行時にエラーが発生することを意味します。

2
CodeBlue

コンパイル時エラーは、構文およびセマンティクスのエラーです。

実行時エラーは、主にロジックのエラーです。プログラマーが見落としているものが原因で、プログラムがクラッシュします。 0による除算、最初に初期化せずに変数にアクセスするなど。

2
Hadi

Googleを使用する場合、次のようになります。

コンパイル時エラーは、Javaプログラムが構文エラー、クラスが見つからない、定義されたクラスのファイル名が間違っている、異なる_を混合しているときに精度が失われるなどのコンパイルを妨げるあらゆるタイプのエラーですJavaデータ型など。

実行時エラーとは、プログラムの実行中に発生するエラーを意味します。この種のエラーに対処するには、Java例外を定義します。例外は、プログラムのフローにおける異常な状態を表すオブジェクトです。これは、チェック済みまたは未チェックのいずれかです。

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

1
user647772

その理由は、プログラムの実行時にその値が実際に設定されるまで、コンパイラは「saleVariable」のオブジェクトタイプを認識しないためです。

SalesVariableにあるすべてのものをタイプDiscountSaleに強制しています。これは安全ではないと見なされ、実行時まで評価できません。

1
bigamil

コンパイラエラーは、コードの不正確さが原因で発生します。この場合、コンパイラはエラーをスローして、コンパイルできないため実行できないエラーを警告します。

例:-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が実行されるまでゼロによる除算につながるかどうかを知ることができません

0
Nikhil Kumar

コンパイル/コンパイル時間/構文/セマンティックエラー:コンパイルまたはコンパイル時エラーは、適切な構文に従わない場合、入力ミスによるエラーです。プログラミング言語のセマンティクスは、コンパイラーによってコンパイル時エラーがスローされます。すべての構文エラーを削除するか、コンパイル時エラーをデバッグするまで、プログラムで1行を実行することはできません。
例:Cにセミコロンがない、またはintIntとして誤入力している。

実行時エラー:実行時エラーは、プログラムが実行状態にあるときに生成されるエラーです。これらのタイプのエラーは、プログラムが予期せぬ動作をしたり、プログラムを強制終了させたりする可能性があります。多くの場合、例外と呼ばれます。
例:存在しないファイルを読み込んでいると、ランタイムエラーが発生するとします。

すべての詳細を読む プログラミングエラー こちら

0
Pankaj Prakash