2012-03-30 50 views
1

海蘭...我有以下代碼:Java對象{}

try { Nrtrde record = new Nrtrde(); } 
    catch (Exception e) { 
     System.out.println(" ERROR\n"); 
     e.printStackTrace(); } 
    finally { Nrtrde record = new Nrtrde(); System.out.println(" OK\n"); } 

record.setSpecificationVersionNumber(specificationVersionNo); 

當編譯我收到以下錯誤:

NRTRDE\ENCODER.java:28: error: cannot find symbol 
     record.setSpecificationVersionNumber(specificationVersionNo); 
     ^
    symbol: variable record 
    location: class ENCODER 
1 error 

看來我不能創建一個對象在try {}之內,並在try {}之外使用。

爲什麼?

謝謝

回答

5

您必須聲明它的外塊,但你可以初始化塊中:

Nrtrde record = null; 
try { 
    record = new Nrtrde(); 
} catch (SomeException e) { 
    // handle exception here 
} 
if(record!=null){ 
    // do something with it 
} 

在Java中,{}是塊分隔符。在其定義的塊外部沒有可見的內容(如果可見性允許,則類成員是此規則的例外)。

+0

非常感謝很多..我現在明白了.. – pufos 2012-03-30 09:01:30

3

因爲它的範圍限於{}。它不會在外面被識別。這就是爲什麼你收到此錯誤

+0

噢噢......我明白 – pufos 2012-03-30 08:57:44

+1

@pufos you。很高興你這樣做:) – Habib 2012-03-30 08:58:43

0

你的記錄變量只在try和finally塊中可見,你必須在try-catch-finally塊之前聲明你的Nrtrde。

2

在這種情況下,你的對象是正確的,直到你的程序退出try塊。這是因爲它是由{}

範圍的,使得它在嘗試終於/漁獲可見這樣做:

Nrtrde record; 
try { record = new Nrtrde(); } 
    catch (Exception e) { 
     System.out.println(" ERROR\n"); 
     e.printStackTrace(); } 
    finally { record = new Nrtrde(); System.out.println(" OK\n"); } 
+0

非常感謝 – pufos 2012-03-30 09:01:17

0

變量只能一對大括號{之間進行acccessed }。

語言/ VariableScope.htm「> http://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm