[英]Try…catch vs if…else for exceptions - Java
如果我想從args[0]
數組中獲取用戶輸入怎么辦,但是如果我(用戶)忘了定義它,我想要提示 - 是否更好地使用if
塊來確定是否數組項是否為空,或者是否捕獲異常? 那就是這個
public class Stuff {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String foo;
if(args.length > 0) {
foo = args[0];
}
else {
foo = getString("Input? ");
}
}
public static String getString(String prompt) {
System.out.print(prompt + " ");
String answer = input.nextLine();
return answer;
}
}
好或壞比
public class Stuff {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String foo;
try {
foo = args[0];
}
catch(ArrayIndexOutOfBoundsException e) {
foo = getString("Input? ");
}
}
public static String getString(String prompt) {
System.out.print(prompt + " ");
String answer = input.nextLine();
return answer;
}
}
您的第一個示例仍將拋出異常,因為在if語句中您仍在訪問不存在的索引。
如果要使用if語句,則應檢查數組的長度是否大於您嘗試訪問的索引,例如:
if(args.length > 0)
foo = args[0];
IMO,if-else在這種情況下更好/更快。
當你在一個方法中並且你想告訴調用者出錯的時候會使用拋出異常,並且你不能用返回值來做。
但正如喬恩泰勒所說,你的if語句不會那樣。
你需要測試args.length
而不是讀取args[0]
但除了該錯誤之外,最好使用if/else
,原因如下:
您真正需要的只是一行代碼。
final String foo = args.length > 0? args[0] : getString("Input? ");
使用if塊來檢查數組是否為空是容易且快速的。
鑒於Jon Taylor所證明的更正,我更喜歡if的版本。
不僅僅是速度增益(在你的例子中我認為不會引人注意),而是因為帶有if的代碼解釋了它的意圖,簡化了代碼的未來維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.