爲什麼編譯器不知道該變量已在try
或catch
塊 中初始化,並且在finally
塊處抱怨?變量未在try catch塊中初始化`finally`
int i;
try {
i = 0;
}
catch (Exception e) {
i = 2;
}
finally {
System.out(i);
}
爲什麼編譯器不知道該變量已在try
或catch
塊 中初始化,並且在finally
塊處抱怨?變量未在try catch塊中初始化`finally`
int i;
try {
i = 0;
}
catch (Exception e) {
i = 2;
}
finally {
System.out(i);
}
如果在初始化之前在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);
}
如果初始化語句(i = 0;
)失敗,那麼該計劃將繼續與finally
塊,其中變量仍然是未初始化的,這就是爲什麼你會得到一個編譯時錯誤。
編譯器將無法知道i
是否會被初始化。它可能因任何原因失敗,因此finally
塊可能無法工作。
OMG面掌客當然'需要你爲什麼說finally塊將捕捉之前預製要在'catch' – forcewill 2014-10-17 13:59:03
之前執行finally'? http://stackoverflow.com/questions/3109353/what-comes-first-finally-or-catch-block – Ian2thedv 2014-10-17 14:08:22
@ Ian2thedv,謝謝。你是對的。我的錯誤 – 2014-10-17 14:09:30