How is multiple exception handling done in java?
本问题已经有最佳答案,请猛点这里访问。
我有下面的代码,在我的弹簧靴应用程序。这段代码进行电子邮件验证,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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?如何实现它来处理这段代码本身中的异常,以及调用方将如何处理异常?
使用multi-catch块,如下所示:
1 2 3 4 5 | try { stuff } catch (AddressException | InvalidEmailAddressException ex) { handle exception } |
首先,我认为从runtimeexception扩展是不好的实践,那个异常意味着程序崩溃,您应该从异常扩展。我认为你应该多读一些Java中的异常。如果您的方法没有捕获异常,您应该在方法签名中放入该方法引发特定异常的方法,例如:
公共静态void validate(list s)引发InvalidEmailAddressException{…}然后做这个:
类InvalidEmailAddressException扩展异常{public invalidemailAddressException(字符串消息){超级(消息)}
那个catch方法,关于addressException,这里没有它的定义,我认为如果您希望这个继续进行到调用者,您根本不应该捕捉它,只需要在throw中声明。
作为snakeyhips答案的替代方案,您可以单独提供几个
1 2 3 4 5 6 7 |
异常有两种类型:选中、未选中。InvalidEmailAddressException扩展RuntimeException,这是不应捕获的未选中异常,因此最好从异常类扩展它。
snakeyhips的答案是可靠的,但要注意,您将无法对不同的异常做出不同的反应。
1 2 3 4 5 6 7 | try { //your code } catch (AddressException e1) { //handle this exception } catch (InvalidAdressException e2) { //handle this exception } |
这将使您能够以不同的方式处理异常。如果您不关心这一点,您也可以捕获一般的异常类:
1 2 3 4 5 |