1

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

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

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

为什么声明后找不到 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

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

在 try 语句之前声明RandomAccessFile airplanesFile = null;,然后更改RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");,您的问题应该会消失。

于 2011-05-03T08:10:04.473 回答
1

因为飞机文件只在 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 catch 包含声明。

如果在代码块内声明了变量/对象,则在 any 内{ }则不能在其外使用。你所要做的 ...

airplanesFile.writeUTF("Test");

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

于 2011-05-03T08:08:29.243 回答
0

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

于 2011-05-03T08:09:32.460 回答
0

那是因为飞机文件是一个局部变量并且只存在于 try 块中。尝试阅读java 中的变量范围

于 2011-05-03T08:10:03.053 回答