以下は、静的タイプチェックと動的タイプチェックの説明であるウィキペディアからのものです。
•静的タイプのチェック:プログラムのソースコードに基づいて、タイプの安全性を確認するプロセス。
•動的タイプのチェック:プログラムの実行中のタイプの安全性を確認するプロセス。
Javaは、静的タイプのチェックを使用して、コンピレーション中にプログラムを分析して、タイプエラーがないことを確認します。基本的なアイデアは、ランタイム中にタイプエラーを発生させないことです。
次のコードは、それを理解した後、Javaの静的タイプチェックがどのように機能するかをよりよく理解することができます。
コードの例
次のクラス、AとB、およびBがAを継承しているとします。
class a {a me(){return this;} public void doa(){system.out.println( "do a");}} class bは{public void dob(){system.out.println( "do b");}}}}を拡張します。まず、new b()。me()への呼び出しは何を返しますか?オブジェクトAまたはB?
ME()メソッドはAオブジェクトを返すように宣言されているため、コンパイル中、コンパイラはAオブジェクトを返すことのみを知っています。ただし、BはAのメソッドを継承し、それ自体を返すため、ランタイム中にBオブジェクトを返します。
静的タイプのチェックはどのように機能しますか?
メソッドDOB()がBオブジェクトによって呼び出されたとしても、次のコード行は違法です。問題は、その参照タイプがAであることです。デバイスをコンパイルするとき、コンパイラはその実際のタイプを知らないため、タイプAとして扱います。
// ILLEGALNEW b()。me()。dob();
したがって、次のコードのみを呼び出すことができます。
// legalnew b()。me()。doa();
ただし、次のように、そのタイプをBにキャストできます。
// legal((b)new b()。me())。dob();
次に、Cクラスを追加します。
class cはa {public void dobad(){system.out.println( "do c");}}}を拡張します次に、次のコードステートメントは静的タイプのチェックを渡します。
// legal((c)new b()。me())。bebad();
コンパイラはその実際のタイプを知りませんが、タイプBをタイプCに変換できないため、ランタイム中に例外がスローされます。
上記は、編集者が紹介したJavaで静的タイプチェックがどのように実行されるかの例の詳細な説明です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!