如何在Java中完成多个异常处理?

时间:2018-11-23 14:44:57

标签: java spring exception-handling

我下面有一段代码,在我的春季启动应用中。这段代码可以进行电子邮件验证,

class EmailValidation {

    public static void validate(List<String> s){
        try {
            for (String address : s) {
                if (s == null || s.indexOf("@") < 0) {  
                    throw new InvalidEmailAddressException("Email address is invalid ");
                }
                new InternetAddress(s);
            }
        } catch(AddressException e){
            LOGGER.Error("Please validate email addresses");
        }
    }
}

class InvalidEmailAddressException extends RuntimeException {

    public InvalidEmailAddressException(String message) {
        super(message)
    }
}

我的问题是如何捕获InvalidEmailAddressException?我如何实现它来处理这段代码本身中的异常以及调用者将如何处理它?<​​/ p>

5 个答案:

答案 0 :(得分:1)

像这样使用多捕获块:

try { 
  stuff
} catch (AddressException | InvalidEmailAddressException ex) { 
  handle exception
}

答案 1 :(得分:0)

SnakeyHips的回答很可靠,但是请注意,您将无法对不同的异常做出不同的反应。

try { 
   //your code
} catch (AddressException e1) { 
  //handle this exception 
} catch (InvalidAdressException e2) { 
  //handle this exception 
}

这将使您能够以不同方式处理异常。如果您对此不关心,也可以直接捕获一般的Exception类:

try { 
   //your code
} catch (Exception e) { 
   //handle exception
}

答案 2 :(得分:0)

有2种例外类型:已检查,未检查。 InvalidEmailAddressException扩展了RuntimeException,它是您不应该捕获的未经检查的异常,因此最好从Exception类扩展它。

答案 3 :(得分:0)

作为SnakeyHips答案的替代方法,您可以分别提供几个catch块,例如

try { 
    // do what you have to do here
} catch (AddressException) { 
    LOGGER.Error("AddressException thrown");
} catch (InvalidEmailAddressException ex) {
    LOGGER.Error("InvalidEmailAddressException thrown");
}

答案 4 :(得分:0)

首先,我认为从RuntimeException扩展不是一个好习惯,该异常意味着程序崩溃,应该从Exception扩展。我认为您应该阅读有关Java异常的更多信息。如果您的方法未捕获异常,则应放入方法签名,该方法会引发特定异常,例如:

public static void validate(List s)引发InvalidEmailAddressException { ...} 然后做一个:

InvalidEmailAddressException类扩展了异常{   公共InvalidEmailAddressException(字符串消息){ 超级(消息) }

关于 AddressException 的catch方法在这里没有定义,我想如果您希望将此方法继续传递给调用者,则根本不要捕获它,只需在抛出。