1

以下のコードをコンパイルしようとすると、次のエラーが発生します。

シンボル symbol が見つかりません
: 変数 planesFile

エラーは、最後のステートメントによって生成されます。

宣言後に RandomAccessFile オブジェクトが見つからないのはなぜですか?

ありがとう!

public static void main(String[] args)
{

    try
    {
        RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");
    }
    catch (FileNotFoundException fnfe)
    {
        fnfe.printStackTrace();
    }

    airplanesFile.writeUTF("Test");
}
4

5 に答える 5

2

これは、変数のスコープに関係しています。airplanesFiletry ブロックの中かっこ内で宣言されます。コンパイラが try ブロックの右中かっこに到達すると、範囲外になります。

RandomAccessFile airplanesFile = null;try ステートメントの前に宣言し、変更RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); するairplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");と、問題は解決するはずです。

于 2011-05-03T08:10:04.473 に答える
1

planesFile は try ブロックでのみ有効であるためです。これを試して:

public static void main(String[] args)
{
    RandomAccessFile airplanesFile = null;

    try
    {
         airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");
    }
    catch (FileNotFoundException fnfe)
    {
        fnfe.printStackTrace();
    }

    try {
        airplanesFile.writeUTF("Test");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
于 2011-05-03T08:10:53.490 に答える
0

対象外です。try キャッチは宣言を囲みます。

変数/オブジェクトがコード ブロック内で宣言されている場合、そのコード ブロックの{ }外側では使用できません。あなたがしなければなりません ...

airplanesFile.writeUTF("Test");

あなたの場合、try catchの内部。

于 2011-05-03T08:08:29.243 に答える
0

airplanesFiletry ブロックが完了すると、範囲外になるためです。ローカル変数宣言のスコープを参照してください

于 2011-05-03T08:09:32.460 に答える
0

これは、planesFile がローカル変数であり、try ブロックにのみ存在するためです。java の変数スコープについて読んでみてください。

于 2011-05-03T08:10:03.053 に答える