プログラムの実行時にエラーが発生しましたが、コンパイル時にはエラーが発生しません

エミルビック

プログラムのコンパイル時に// 1でマークされた行にエラーがないのに、実行時にエラーが発生するのはなぜですか。私はJavaを初めて使用するので、クラスがどのように機能するかをよりよく理解しようとしています。

class A{
private int x;
}

class B extends A{
private int a;
void exec(){
    System.out.println("test");
}

static void function(A a){
    ((B)a).exec();//1
}

public static void main(String argv[]){
    B.function(new A());
    B.function(new B());
}
}
rgettman

基本的に、Javaでは、キャストが成功する可能性がある場合、つまり、がスローされない可能性がある場合に、参照型を別の参照型にキャストできますClassCastExceptionもちろん、成功することを保証することはできません。これまで見てきたように、Aへの参照はBオブジェクトを参照している可能性がありますが、Bオブジェクトではない可能性があります。

JLSのセクション5.5.1では、元の参照型(S)とキャスト型(T)の両方がクラス型である場合にコンパイラエラーが発生する原因について詳しく説明しています。

コンパイル時参照型S(ソース)とコンパイル時参照型T(ターゲット)が与えられた場合、以下の規則によりコンパイル時エラーが発生しなければ、SからTへのキャスト変換が存在します。

Sがクラスタイプの場合:

  • Tがクラス型の場合、| S |のいずれか <:| T |、または| T | <:| S |。そうしないと、コンパイル時エラーが発生します。

<:JLSの表記は、「のサブタイプ」を意味します。)

BはのサブタイプであるためA、aAからaへのキャストBは合法です。これは、成功する可能性があるためです。対照的に、たとえばString無関係な型にキャストすると、コンパイラエラーが発生します。そのキャストは成功できません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SDLプログラムの実行時に未定義のシンボルエラーが発生しました

分類Dev

DEV C ++:プログラムのコンパイル中にエラーは発生しませんが、実行されていません

分類Dev

openglプログラムはコンパイルされますが、実行時にエラーが発生します(UBUNTU 14.04)

分類Dev

Geany IDEでコンパイルされたCプログラムの実行中にエラーが発生しましたエラーコード:127

分類Dev

sassのコンパイル時にWebpackエラーが発生しました

分類Dev

Webスクレイパープログラムの実行時に「スレッド「メイン」java.lang.NullPointerExceptionの例外」エラーが発生しました

分類Dev

OpenCLプログラムの実行時にclGetPlatformIDエラーが発生しました。

分類Dev

WebViewを含むQtプログラムのコンパイル中にエラーが発生しました

分類Dev

Cプログラムのコンパイル中にエラーが発生しましたか?

分類Dev

Cプログラムのコンパイル中にエラーが発生しました

分類Dev

ベクトルを参照すると、プログラムの実行時にエラーが発生します

分類Dev

Railsコンソールの実行時にロードエラーが発生しました

分類Dev

内部エラー(NullPointerException)intellijIdeaがコンパイル時に発生しました

分類Dev

GWT / GAEアプリの実行時にタイムゾーンエラーが発生しました

分類Dev

HyperledgerIroha-サンプルコードの実行時にMST_EXPIREDエラーが発生しました

分類Dev

gitpullコマンドの発行時にエラーが発生しました

分類Dev

cordovaプラグインのaarからjarを抽出します。実行時にクラスが見つかりませんエラーが発生します

分類Dev

Javaファイルスクリプトのコンパイル時にエラーが発生しました

分類Dev

シェルスクリプトの実行時に「コマンドが見つかりません」エラーが発生しました

分類Dev

C ++プログラムでto_stringを使用中にコンパイルエラーが発生しました

分類Dev

コマンド実行時に「入出力エラー」が発生しました

分類Dev

ɵɵinject&ɵɵdefineInjectableが原因でAngularアプリを実行できません(コンパイル時にエラーが発生します)

分類Dev

パイプシンボルの使用中にCプログラムでエラーが発生しました

分類Dev

コンパイル時にerlangのレコードに関してエラーが発生しました

分類Dev

Hello World Rustプログラムはコンパイルされますが、実行すると認証エラーは発生しません

分類Dev

Hello World Rustプログラムはコンパイルされますが、実行すると認証エラーは発生しません

分類Dev

Ionicはインストール時にエラーが発生しませんが、実行時に何もしません

分類Dev

開発Nuxtjsの実行時にエラーが発生しました

分類Dev

LinuxでACプログラムを実行中にmpirunコマンドエラーが発生しました

Related 関連記事

  1. 1

    SDLプログラムの実行時に未定義のシンボルエラーが発生しました

  2. 2

    DEV C ++:プログラムのコンパイル中にエラーは発生しませんが、実行されていません

  3. 3

    openglプログラムはコンパイルされますが、実行時にエラーが発生します(UBUNTU 14.04)

  4. 4

    Geany IDEでコンパイルされたCプログラムの実行中にエラーが発生しましたエラーコード:127

  5. 5

    sassのコンパイル時にWebpackエラーが発生しました

  6. 6

    Webスクレイパープログラムの実行時に「スレッド「メイン」java.lang.NullPointerExceptionの例外」エラーが発生しました

  7. 7

    OpenCLプログラムの実行時にclGetPlatformIDエラーが発生しました。

  8. 8

    WebViewを含むQtプログラムのコンパイル中にエラーが発生しました

  9. 9

    Cプログラムのコンパイル中にエラーが発生しましたか?

  10. 10

    Cプログラムのコンパイル中にエラーが発生しました

  11. 11

    ベクトルを参照すると、プログラムの実行時にエラーが発生します

  12. 12

    Railsコンソールの実行時にロードエラーが発生しました

  13. 13

    内部エラー(NullPointerException)intellijIdeaがコンパイル時に発生しました

  14. 14

    GWT / GAEアプリの実行時にタイムゾーンエラーが発生しました

  15. 15

    HyperledgerIroha-サンプルコードの実行時にMST_EXPIREDエラーが発生しました

  16. 16

    gitpullコマンドの発行時にエラーが発生しました

  17. 17

    cordovaプラグインのaarからjarを抽出します。実行時にクラスが見つかりませんエラーが発生します

  18. 18

    Javaファイルスクリプトのコンパイル時にエラーが発生しました

  19. 19

    シェルスクリプトの実行時に「コマンドが見つかりません」エラーが発生しました

  20. 20

    C ++プログラムでto_stringを使用中にコンパイルエラーが発生しました

  21. 21

    コマンド実行時に「入出力エラー」が発生しました

  22. 22

    ɵɵinject&ɵɵdefineInjectableが原因でAngularアプリを実行できません(コンパイル時にエラーが発生します)

  23. 23

    パイプシンボルの使用中にCプログラムでエラーが発生しました

  24. 24

    コンパイル時にerlangのレコードに関してエラーが発生しました

  25. 25

    Hello World Rustプログラムはコンパイルされますが、実行すると認証エラーは発生しません

  26. 26

    Hello World Rustプログラムはコンパイルされますが、実行すると認証エラーは発生しません

  27. 27

    Ionicはインストール時にエラーが発生しませんが、実行時に何もしません

  28. 28

    開発Nuxtjsの実行時にエラーが発生しました

  29. 29

    LinuxでACプログラムを実行中にmpirunコマンドエラーが発生しました

ホットタグ

アーカイブ