對於在try/catch
塊中放入多少代碼是否存在「最佳做法」?要在try-catch塊中放入多少代碼
我在下面發佈了3種不同的場景。
我沒有在每個catch
塊中包含行爲,並且我沒有包含finally塊。這是爲了提高觀衆的可讀性。假設每個catch
做了不同的事情。並假設finally
將關閉流。試圖爲未來的讀者創建一個易於閱讀的示例。
- Control,no
try/catch
。 - 每個需要的地方代碼爲1
try/catch
。 - 只有1個
try/catch
周圍整個代碼塊的代碼。
什麼是公認的最佳實踐,爲什麼?
方案1
代碼,而無需try/catch
,只是控制。
BufferedReader bufferedReader = new BufferedReader(new FileReader("somepath"));
String line;
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
bufferedReader.close();
方案2
代碼與try/catch
塊爲所需的每個單獨的位置。
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader("somepath"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line;
try {
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
方案3
代碼與1 try/catch
的代碼整個塊周圍。
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("somepath"));
String line;
while ((line = bufferedReader.readLine()) != null) {
Object object = new Object();
this.doSomething(object);
}
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
我認爲這是更好地把一個try語句和多個接球要捕捉到的異常。更好的可讀性。 –
在場景1中,你的意思是方法本身拋出IOException' – Vallentin
@Vallentin'場景1'只是爲了控制,基本上忽略它。我只是想顯示沒有'try/catch'塊的代碼。 – prolink007