声明后编译器无法找到RandomAccessFile

时间:2011-05-03 08:05:53

标签: java declaration random-access

当我尝试编译它时,下面的代码会产生以下错误:

找不到符号
符号:可变飞机文件

错误是由最后一个语句产生的。

为什么在声明后找不到RandomAccessFile对象?

谢谢!

public static void main(String[] args)
{

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

    airplanesFile.writeUTF("Test");
}

5 个答案:

答案 0 :(得分:2)

这与变量范围有关。 {try {1}}在try块的大括号内声明。当编译器命中try块的右括号时,它超出了范围。

在try语句之前声明airplanesFile,并将RandomAccessFile airplanesFile = null;更改为RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); ,您的问题就会消失。

答案 1 :(得分:1)

因为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();
    }
}

答案 2 :(得分:0)

超出范围。 try catch包含声明。

如果在代码块中声明变量/对象,则在任何{ }内,则不能在其外部使用它。你必须做......

airplanesFile.writeUTF("Test");

在try catch中,在你的情况下。

答案 3 :(得分:0)

因为一旦try块完成,你的airplanesFile就超出了范围。见Scope of Local Variable Declarations

答案 4 :(得分:0)

那是因为airplanesFile是一个局部变量,只存在于try块中。请尝试阅读about variable scopes in java