多態性に関する私の教授スライドの1つで、このコードの一部にいくつかのコメントが付いています。
discountVariable = //will produce
(DiscountSale)saleVariable;//run-time error
discountVariable = saleVariable //will produce
//compiler error
ご覧のとおり、最初のキャスト文ではrun-timeエラーが発生し、もう1つのキャスト文ではcompiler errorが発生します。
これらのエラーの原因は何ですか?そして、それらはどのように互いに異なっていますか?
実行時エラーは、コードが実際に実行されている場合にのみ発生します。これらは最も困難なものであり、プログラムのクラッシュやコードのバグにつながり、追跡が困難になる可能性があります。
例として、文字列「hello」を整数に変換しようとする場合があります。
string helloWorld = "hello";
int willThrowRuntimeError = Convert.ToInt32(helloWorld);
コンパイラーはこれを問題とは見なさないかもしれませんが、実行するとエラーがスローされます。
コンパイラエラーは、コードの不正確さが原因で発生します。この場合、コンパイラはエラーをスローして、コンパイルできないため実行できないエラーを警告します。
コンパイラエラーの例は次のとおりです。
int = "this is not an int";
お役に立てば幸いです。
プログラムの実行中に実行時エラーが発生します。コードをコンパイルしようとすると、コンパイラエラーが発生します。
コードをコンパイルできない場合、それはコンパイラエラーです。
コードをコンパイルして実行しても、実行中に失敗した場合、それはランタイムです。
コンパイル時エラーは構文とセマンティクスを指します。たとえば、さまざまなタイプを含む操作を行う場合。例:文字列にintを追加するか、文字列を実数で除算します。 (最後の段落を読んでください!!!)
実行時エラーは、プログラムの実行時に検出されるエラーです。たとえば、ゼロによる除算。コンパイラーは、操作x/a-bが実行されるまでゼロによる除算につながるかどうかを知ることができません。
これは非常にbroadの説明です。多くのスマートコンパイラがあり、また、さまざまなタイプ間で内部キャストを実行して、意味のある操作を行うことができます。コードがプリコンパイルされ、コードが実行されない場合でも、いくつかの実行時エラーを確認できます。
このリンクも参照してください: ランタイムvsコンパイル時間
違いが何であるかについての一般的な説明を既に入手していると思います。特に、OPで示したコードでは、
コンパイル時エラーは、discountVariable = saleVariable
が次のようにセミコロンで終了しなければならないことをコンパイラが認識していることを意味しますdiscountVariable = saleVariable;
so.
実行時エラーとは、saleVariableをdiscountVariableにキャストしている場合でも、型が異なるためキャストできないため、実行時にエラーが発生することを意味します。
コンパイル時エラーは、構文およびセマンティクスのエラーです。
実行時エラーは、主にロジックのエラーです。プログラマーが見落としているものが原因で、プログラムがクラッシュします。 0による除算、最初に初期化せずに変数にアクセスするなど。
Googleを使用する場合、次のようになります。
コンパイル時エラーは、Javaプログラムが構文エラー、クラスが見つからない、定義されたクラスのファイル名が間違っている、異なる_を混合しているときに精度が失われるなどのコンパイルを妨げるあらゆるタイプのエラーですJavaデータ型など。
実行時エラーとは、プログラムの実行中に発生するエラーを意味します。この種のエラーに対処するには、Java例外を定義します。例外は、プログラムのフローにおける異常な状態を表すオブジェクトです。これは、チェック済みまたは未チェックのいずれかです。
http://wiki.answers.com/Q/Difference_between_run_time_error_and_compile_time_error_in_Java
その理由は、プログラムの実行時にその値が実際に設定されるまで、コンパイラは「saleVariable」のオブジェクトタイプを認識しないためです。
SalesVariableにあるすべてのものをタイプDiscountSaleに強制しています。これは安全ではないと見なされ、実行時まで評価できません。
コンパイラエラーは、コードの不正確さが原因で発生します。この場合、コンパイラはエラーをスローして、コンパイルできないため実行できないエラーを警告します。
例:-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が実行されるまでゼロによる除算につながるかどうかを知ることができません
コンパイル/コンパイル時間/構文/セマンティックエラー:コンパイルまたはコンパイル時エラーは、適切な構文に従わない場合、入力ミスによるエラーです。プログラミング言語のセマンティクスは、コンパイラーによってコンパイル時エラーがスローされます。すべての構文エラーを削除するか、コンパイル時エラーをデバッグするまで、プログラムで1行を実行することはできません。
例:Cにセミコロンがない、またはint
をInt
として誤入力している。
実行時エラー:実行時エラーは、プログラムが実行状態にあるときに生成されるエラーです。これらのタイプのエラーは、プログラムが予期せぬ動作をしたり、プログラムを強制終了させたりする可能性があります。多くの場合、例外と呼ばれます。
例:存在しないファイルを読み込んでいると、ランタイムエラーが発生するとします。
すべての詳細を読む プログラミングエラー こちら