2014-10-17 63 views

回答

2

如果在初始化之前在catch塊中打印變量'i',它會給出錯誤,因爲編譯器認爲可能在'i'在try塊中被設置之前拋出異常,在這種情況下'i'不會被初始化終於在這裏也就是這種情況,也就是說,當你在finally塊中編譯'i'時,編譯器認爲'i'被設置在catch塊之前可能會拋出異常,在這種情況下'i'不會被初始化'

編譯器不知道該變量是在try或catch塊中初始化的。編譯器抱怨,因爲應該同時聲明和初始化局部變量,但是你已經聲明瞭它。如果你在任何一個block中使用它(try,catch,finally),沒有初始化編譯器就會抱怨它。試試看:

int i; 
    try { 
     System.out.println(i); 
     //i = 0; 
    } 
    catch (Exception e) { 
     System.out.println(i); 
     //i = 2; 
    } 
    finally { 
     System.out.println(i); 
    } 
5

如果初始化語句(i = 0;)失敗,那麼該計劃將繼續與finally塊,其中變量仍然是未初始化的,這就是爲什麼你會得到一個編譯時錯誤。

+0

OMG面掌客當然'需要你爲什麼說finally塊將捕捉之前預製要在'catch' – forcewill 2014-10-17 13:59:03

+0

之前執行finally'? http://stackoverflow.com/questions/3109353/what-c​​omes-first-finally-or-catch-block – Ian2thedv 2014-10-17 14:08:22

+0

@ Ian2thedv,謝謝。你是對的。我的錯誤 – 2014-10-17 14:09:30

2

編譯器將無法知道i是否會被初始化。它可能因任何原因失敗,因此finally塊可能無法工作。