RandomAccessFile не может быть найден компилятором после объявления - PullRequest
1 голос
/ 03 мая 2011

Приведенный ниже код выдает следующую ошибку, когда я пытаюсь скомпилировать его:

не удается найти символ
символ: переменная airplanesFile

Ошибка вызванапоследний оператор.

Почему объект RandomAccessFile не может быть найден после его объявления?

Спасибо!

public static void main(String[] args)
{

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

    airplanesFile.writeUTF("Test");
}

Ответы [ 5 ]

2 голосов
/ 03 мая 2011

Это связано с переменной областью видимости.airplanesFile объявлено в фигурных скобках блока try.Он выходит из области видимости, когда компилятор нажимает закрывающую скобку блока try.

Объявите RandomAccessFile airplanesFile = null; перед оператором try и измените RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); на airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");, и ваша проблема должна исчезнуть.

1 голос
/ 03 мая 2011

Поскольку airplanesFile действителен только в блоке 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();
    }
}
0 голосов
/ 03 мая 2011

Поскольку ваш airplanesFile выходит из области действия после завершения блока try. См. Область применения локальных переменных

0 голосов
/ 03 мая 2011

Это потому, что airplanesFile является локальной переменной и существует только в блоке try.Попробуйте прочитать о переменных областях в java .

0 голосов
/ 03 мая 2011

Это выходит за рамки. Поймать try включает в себя объявление.

Если переменная / объект объявлена ​​в блоке кода, внутри любого { }, то его нельзя использовать вне его. Вы должны сделать ...

airplanesFile.writeUTF("Test");

Внутри try catch, в вашем случае.

...