Java 如何在不使用“throws XXXException”的情况下处理“未处理的异常”

Java 如何在不使用“throws XXXException”的情况下处理“未处理的异常”,java,exception,Java,Exception,我有一个任务,需要在不使用throws-XXXException的情况下处理未处理的异常。情况如下: 我需要重试一个抛出JMSException的方法 public void retry(int retryCount) throws MessageGatewayException, JMSException { restartConnection(); // } 在我的send方法中,我调用retry public void send(int retryCount) throws Me

我有一个任务,需要在不使用throws-XXXException的情况下处理未处理的异常。情况如下:

我需要重试一个抛出JMSException的方法

public void retry(int retryCount) throws MessageGatewayException, JMSException {
    restartConnection(); //
}
在我的send方法中,我调用retry

public void send(int retryCount) throws MessageGatewayException {
    //exit method if retried enough times.
    if(retryCount > someNumber)
        throw new IllegalArgumentException();
    try {
        producer.send();
    }
    catch (JMSException e) {
        retry(retryCount); // this is where Unhandled Exception is.
    }
}

我要做的是当从发送调用retry时,如果restartConnection失败并引发JMSException,我希望retry调用sendretryCount++。我不想在send方法上添加JMSException,但它说我需要实现它。有没有办法处理异常,这样发送时就不会有JMSException?

所以我找到了一种方法来处理这个异常,但我不确定这是正常的做法。以下是我所做的:

public void send(int retryCount) throws MessageGatewayException {
    //exit method if retried enough times.
    if(retryCount > someNumber)
        throw new IllegalArgumentException();
    try {
        producer.send();
    }
    catch (JMSException e) {
        try {
            retry(retryCount); // this is where Unhandled Exception is
        }
        catch (JMSException ex) {
            send(++retryCount);
        }
    }
}

因此,我基本上是在catch块中使用另一个try/catch块。这确实消除了错误,而且效果很好,但我不确定这是正确的做法。

因此我找到了一种处理方法,但我不确定这是正常的做法。以下是我所做的:

public void send(int retryCount) throws MessageGatewayException {
    //exit method if retried enough times.
    if(retryCount > someNumber)
        throw new IllegalArgumentException();
    try {
        producer.send();
    }
    catch (JMSException e) {
        try {
            retry(retryCount); // this is where Unhandled Exception is
        }
        catch (JMSException ex) {
            send(++retryCount);
        }
    }
}

因此,我基本上是在catch块中使用另一个try/catch块。这确实消除了错误,而且工作正常,但我不确定这是正确的方法。

您可以使用retryCount+1调用该方法,但当您达到例如10时,引发异常以避免无限错误

在发送中处理它


您可以使用retryCount+1调用该方法,但当您到达(例如10)时,将引发异常以避免无限错误

在发送中处理它


似乎保留重试方法中包含的重试逻辑是可取的。这假定要发送的初始retryCount参数是要尝试的最大重试次数

public void retry(int retryCount) throws MessageGatewayException {

    while (retryCount-- > 0 && !restartConnection());

}
并将布尔结果添加到restartConnection:


在本例中,您的发送方法保持不变。

似乎希望保留重试方法中包含的重试逻辑。这假定要发送的初始retryCount参数是要尝试的最大重试次数

public void retry(int retryCount) throws MessageGatewayException {

    while (retryCount-- > 0 && !restartConnection());

}
并将布尔结果添加到restartConnection:


在本例中,您的发送方法没有改变。

当您达到错误的10倍时,您希望如何处理它、记录和打印?这是停止异常传播的方法当你达到10倍的错误时,你想如何处理它,记录,打印?这是停止异常传播的方法。第一个解决方案将解决这个问题,但我很好奇这是否是常规的做法。我对异常使用try/catch块还很陌生。第一个解决方案将解决这个问题,但我很好奇这是否是常规的做法。对于异常使用try/catch块,我还是个新手。。
public void retry(int retryCount) throws MessageGatewayException {

    while (retryCount-- > 0 && !restartConnection());

}
public boolean restartConnection() {
    try {
        init(); 
        return true;
    } catch (JMSException e) {
       return false;
    }
}