經過長時間的差距,我重新開始用Java編寫代碼 - 在過去的幾年中,我的大部分編碼工作都在PHP & JavaScript中 - 我發現我必須更加努力才能滿足Java編譯器對變量作用域和異常處理等問題要嚴格得多。引起我一些麻煩的一段代碼如下所示Java範圍界定和可視性規則
File file = new File(path, fname);
FileOutputStream stream = null;
try
{
stream = new FileOutputStream(file);
stream.write(tosave.getBytes());
}
finally
{
try
{
if (null != stream) {stream.close();}
return true;
}
catch(Exception e){return false;}
}
這被編譯器接受。但是,在我來到這裏之前,我遇到過幾個問題。
- 第一次嘗試:沒有捕捉塊。編譯器拒絕玩球,因爲它希望我處理無法創建FileOutputStream的可能性。同樣寫入該流。我理解這個推理背後的邏輯並且喜歡它。
- 第二次嘗試:捕獲塊,但...:我宣佈並創建
stream
變量INSIDEtry
塊。編譯器再次拋出一個抖動 -stream
變量在finally
塊中超出範圍。
正如你所看到的,我已經通過在try
塊之上聲明stream
並將其初始化爲空來解決問題。
This Works。但是,鑑於我的Java技能有多麼生疏,我想我會問:有沒有正確的方式來編寫這樣的代碼?
你可以嘗試使用與資源使用Java 7 onwards..Just一些糖,還是更少的代碼 – zencv
http://docs.oracle.com/javase/tutorial/essential/exceptions /tryResourceClose.html –