尝试... catch vs if ... else for exceptions - Java

时间:2012-06-29 09:38:47

标签: java if-statement try-catch

如果我想从args[0]数组中获取用户输入怎么办,但是如果我(用户)忘记定义它,我想要提示 - 是否最好使用{{ 1}}阻止确定数组项是否为空,或者捕获异常?那么,这是

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;
    }   
}

6 个答案:

答案 0 :(得分:6)

你的第一个例子仍然会抛出异常,因为在if语句中你仍然在访问一个不存在的索引。

如果你想使用if语句,那么你应该检查数组的长度是否大于你试图访问的索引,例如:

if(args.length > 0)
    foo = args[0];

答案 1 :(得分:4)

IMO,if-else在这种情况下更好/更快。

如果您在某个方法中并且想要向调用方说出某些问题,并且您无法使用返回值执行该操作,则会使用抛出异常。

但正如乔恩泰勒所说,你的if语句将无法正常运作。

答案 2 :(得分:4)

您需要测试args.length而不是阅读args[0]

但除了该错误之外,最好使用if/else,原因如下:

  • 使代码更清晰
  • 它具有更好的性能(虽然在这种情况下不相关)
  • 没有异常情况(预计args数组在某些情况下可能为空,例如“用户错误”,因此代码应该能够处理它)。对于不应该发生的特殊情况,应保留例外投掷。

答案 3 :(得分:2)

您真正需要的只是一行代码。

final String foo = args.length > 0? args[0] : getString("Input? ");

答案 4 :(得分:1)

使用if来检查数组是否为空是容易且更快。

答案 5 :(得分:1)

鉴于Jon Taylor所证明的更正,我更倾向于使用if。

不仅速度增益(在你的例子中我认为不会引人注意),而是因为带有if的代码解释了它的意图,简化了代码的未来维护。