当我尝试编译下面的代码时,会产生以下错误:
找不到符号
符号: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块中。