0

try/catch のスコープは何ですか? 基本的に、いくつかのオブジェクトを逆シリアル化し、それらを格納するための新しい参照を作成しています。それらがロードされたら、参照でメソッドを使用しようとしましたが、以下のコンパイル エラーが発生しました。

        try{
        ObjectInputStream is = new ObjectInputStream(new FileInputStream("saveGame.ser"));
        gameCharacter oneRestore = (gameCharacter) is.readObject();
        gameCharacter twoRestore = (gameCharacter) is.readObject();
        gameCharacter threeRestore = (gameCharacter) is.readObject();
    } catch (Exception ex) {ex.printStackTrace();}

    System.out.println("One's type is: " + oneRestore.getType());
    System.out.println("Two's type is: " + twoRestore.getType());
    System.out.println("Three's type is: " + threeRestore.getType());

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

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
oneRestore cannot be resolved
twoRestore cannot be resolved
threeRestore cannot be resolved
4

2 に答える 2

2

スコープはtryブロック内です。このような場合、次のように、tryブロックの前に変数を宣言し、フラグを使用して、変数にアクセスする前に変数が設定されているかどうかを確認する必要があります。

gameCharacter oneRestore=null;
gameCharacter twoRestore=null;
gameCharacter threeRestore=null;
boolean wasRead = true;

try{
ObjectInputStream is = new ObjectInputStream(new FileInputStream("saveGame.ser"));
oneRestore = (gameCharacter) is.readObject();
twoRestore = (gameCharacter) is.readObject();
threeRestore = (gameCharacter) is.readObject();
} catch (Exception ex) {
wasRead=false;
ex.printStackTrace();
}

if (wasRead) {
System.out.println("One's type is: " + oneRestore.getType());
System.out.println("Two's type is: " + twoRestore.getType());
System.out.println("Three's type is: " + threeRestore.getType());
}

ところで、クラス名は大文字で始めることをお勧めします。したがって、 Java プログラマーにはgameCharacter->GameCharacterの方が望ましいように見えます。

于 2013-06-03T03:29:53.603 に答える