尝试捕获相同类型Java的异常

时间:2017-03-03 04:44:31

标签: java exception try-catch

我想知道是否有一种方法可以在catch中使用相同的异常类型。

基本上我们有这个:

catch(IllegalArgumentException exception){
  throw new IllegalArgumentException("Error CheckingAccount: negative initial balance");
  throw new IllegalArgumentException("Error deposit: negative amount");
  throw new IllegalArgumentException("Error withdraw: illegal amount");
}

我想知道如何在相同的异常类型之间进行更改,但是在需要时可以调用它。我需要if-else个陈述吗?顺便说一句,这不是主要的。

具体来说,这是String getMessage()

5 个答案:

答案 0 :(得分:1)

你没有随机播放

您的方法只执行多次检查,并抛出相同类型的异常,但使用不同的消息。

调用此方法的代码对此类异常有一个捕获并打印消息。

这就是全部。

答案 1 :(得分:0)

根据你的代码总是抛出catch子句中的第一个。 您可以定义自己的异常类并将所有异常抛出。然后,您可以使用记录器记录错误。

catch(IllegalArgumentException exception){
        throw new MyExceptionClass(exception.getMessage(),exception);

}

你的班级可以是这样的:

public class MyExceptionClass extends Exception {
/**
 * @param messages
 * @param e
 */
public MyExceptionClass (String messages,Exception e   ){
    super(messages,e);
}

}

答案 2 :(得分:0)

对于不同类型的方案,您可以创建不同类型的用户定义的异常。

在您的情况下,您可以定义三个新的例外:

class NegativeInitialBalance extends Exception {}
class NegativeAmount extends Exception {}
class IllegalAmount extends Exception {}

如果您不想要任何详细说明,只需宣布课程即可

现在,您可以从类中抛出这些异常并适当地捕获它们。然后,您可以使用适当的消息重新抛出它们,例如

try {

    if(initialBalance < 0) {
        throw new NegativeInitialBalance();
    }
    ..
     if (amount < 0) {
        thrwo new NegativeAmount();
    }
    ...
    if(amount > limit) {
        throw new IllegalAmount();
    }


}
catch (NegativeInitialBalance e) {
    throw new IllegalArgumentException("Error CheckingAccount: negative initial balance");
}
catch (NegativeAmount e) {
    throw new IllegalArgumentException("Error deposit: negative amount");
}
catch (IllegalAmount e) {
    throw new IllegalArgumentException("Error withdraw: illegal amount");
}

修改

更好的方法是使用自定义异常,而不是使用IllegalArgumentException消息重新抛出它们。您可以像这样定义例外。

class NegativeInitialBalance extends Exception {
    @Override
    public String toString() { 
        return ("Error CheckingAccount: negative initial balance");
    }
}

class NegativeAmount extends Exception {
    @Override
    public String toString() { 
        return ("Error deposit: negative amount");
    }
}

class IllegalAmount extends Exception {
    @Override
    public String toString() { 
        return ("Error withdraw: illegal amount");
    }
}

无需再抓住并重新抛出它们。直接使用它们

public static void main(String[] args) {

    ...

    if(initialBalance < 0) {
        throw new NegativeInitialBalance();
    }
    ..
     if (amount < 0) {
        thrwo new NegativeAmount();
    }
    ...
    if(amount > limit) {
        throw new IllegalAmount();
    }

}

答案 3 :(得分:0)

你需要一个if-else来选择。

    function cal_click(cal_date){
       var calDate = cal_date
       var date_format = calDate.replace(/-/g, "/");
       var base_url = <?php base_url(); ?>
       $.ajax({
        type: "post",
        url: "<?php echo base_url('Admin_top/getcal');?>",
        data: {calDate:calDate},
        cache: false,
        async: false,
        success: function(result){

                console.log(result);
                var obj = JSON.parse(result);
                alert(obj.status);
                //alert(result);
                var user_id = [];
                var start_time = [];
                for (i = 0; i < obj.data.length; i++) {
                   user_id[i] = obj.data[i].user_id;
                   start_time[i] = obj.data[i].start_time;
                }
             alert(' First user '+user_id[0]+' Second User '+ user_id[1]+' First start_time '+start_time[0]+' Second start_time '+ start_time[1] );

            }

        });
    }

您也可以使用try-catch。

double div(double d1, double d2){
    if(d2 == 0)
        throw new IllegalArgumentException("Division by 0.");
    if(d2 > d1)
       throw new IllegalArgumentException("Some message.");
    if(something else)
       throw new IllegalArgumentException("Your message.");
    return d1/d2;
}

答案 4 :(得分:0)

创建包含所有可能的Argument异常的枚举:

Integration

然后创建方法

MyObIdentifier

然后你可以使用它:

enum ArgumentExceptions {
    NEGATIVE_INITIAL_BALANCE("Error CheckingAccount: negative initial balance"),
    NEGATIVE_DEPOSIT("Error deposit: negative amount"),
    ILLEGAL_WITHDRAW("Error withdraw: illegal amount");

    private String value;

    ArgumentExceptions(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

当然,变量类型可能不同(我建议使用BigDecimal进行平衡)。