Java 捕获同一异常两次

Java 捕获同一异常两次,java,exception,try-catch,Java,Exception,Try Catch,我有以下资料: public void method(){ try { methodThrowingIllegalArgumentException(); return; } catch (IllegalArgumentException e) { anotherMethodThrowingIllegalArgumentException(); return; } catch (Il

我有以下资料:

public void method(){

    try {
        methodThrowingIllegalArgumentException();
        return;
    } catch (IllegalArgumentException e) {
        anotherMethodThrowingIllegalArgumentException();            
        return;
    } catch (IllegalArgumentException eee){ //1
       //do some
       return;
    } catch (SomeAnotherException ee) {
       return;
    }
}
Java不允许我们捕获两次异常,因此在
//1
处出现编译错误。但我需要做我想做的事情:

首先尝试通过IllegalArgumentException()的
方法
如果在
IAE
中失败,请尝试
anotherMethodThrowingIllegalArgumentException(),如果IAE也出现故障,请执行一些操作并返回。如果它因
SomeAnotherException
而失败,只需返回即可


如何执行此操作?

如果
catch
块内的
anotherMethodThrowingIllegalArgumentException()
调用可能引发异常,则应在那里捕获异常,而不是作为“顶级”
try
语句的一部分:

public void method(){

    try{
        methodThrowingIllegalArgumentException();
        return;
    catch (IllegalArgumentException e) {
        try {
            anotherMethodThrowingIllegalArgumentException();            
            return;
        } catch(IllegalArgumentException eee){
            //do some
            return;
        }
    } catch (SomeAnotherException ee){
       return;
    }
}

@圣安塔里奥对我来说,这似乎是一种代码味道——尽管这是正确的答案。如果您必须以这种方式编写代码,您可能可以将其重构为更干净的代码。据我所知,catch语句不应该做任何可能导致异常情况的事情。@crush据我所知,我认为那不是真的,因为有时候你想抛出比,比如,IndexOutOfBoundException@St.Antario明确地从捕获物内部投掷并非例外情况。不过,从捕获物内部调用某些代码以产生异常情况并不理想。我想您一定在做一些事情,比如向可能不可用的资源写入日志文件。处理类似情况的一种更简洁的方法是使用日志接口,实现在其中处理内部异常,例如。@不完全是这样,我正在尝试执行两种不同的转换策略。如果第一个失败,请尝试第二个。@St.Antario当然,您不知道类型…在尝试转换之前,您应该分析数据以猜测正确的类型。这样做可能会更快。例外情况可能是缓慢和昂贵的。这实际上取决于要转换的数据、迭代的转换方法的数量,以及是否需要快速处理大量操作。