在声明RandomAccessFile后,编译器无法找到它



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

找不到符号
符号:variable airplanesFile

错误由最后一条语句产生。

为什么RandomAccessFile对象不能被发现后,它的声明?

谢谢!

public static void main(String[] args)
{
    try
    {
        RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");
    }
    catch (FileNotFoundException fnfe)
    {
        fnfe.printStackTrace();
    }
    airplanesFile.writeUTF("Test");
}

这与变量作用域有关。airplanesFile在try块的大括号内声明。当编译器碰到try块的右括号时,它将超出作用域。

在try语句之前声明RandomAccessFile airplanesFile = null;,并将RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); 更改为airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");,问题就解决了。

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

超出范围。try catch将声明括起来。

如果一个变量/对象是在一个代码块中声明的,在任何{ }中,那么它不能在它的外部使用。

airplanesFile.writeUTF("Test");

在try catch中

因为一旦try块完成,您的airplanesFile就超出了范围。参见局部变量声明的作用域

这是因为airplanesFile是一个局部变量,只存在于try块中。

最新更新