2011-05-03 16 views
1

下面的代碼產生以下錯誤當我試圖編譯後發現:的RandomAccessFile不能由編譯器所聲明

找不到符號
符號:

該錯誤是由生產變量airplanesFile最後的聲明。

爲什麼RandomAccessFile對象在聲明後不能找到?

謝謝!

public static void main(String[] args) 
{ 

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

    airplanesFile.writeUTF("Test"); 
} 

回答

0

超出範圍。 try catch包含聲明。

如果在代碼塊內聲明變量/對象,則在任何{}之內聲明變量/對象,則它不能在其外部使用。你必須這樣做...

airplanesFile.writeUTF("Test"); 

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

2

這與變量作用域有關。在try塊的大括號內聲明airplanesFile。當編譯器碰到try塊的大括號時,它超出了範圍。

聲明RandomAccessFile airplanesFile = null;之前try語句和更改RandomAccessFile airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw"); airplanesFile = new RandomAccessFile("airplanesFile.ran", "rw");和您的問題應該消失。

+0

我傻......我忘了嘗試塊超出範圍...... 亞辛也有有關放置writeUTF方法調用try塊,因爲它可以拋出IOException好點。 我很驚訝於響應的速度,數量和質量。我一定會留在這裏:-) 謝謝! – mg11 2011-05-03 08:18:58

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(); 
    } 
} 
相關問題