我想知道是否有一种方法可以在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()
。
答案 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进行平衡)。