gpt4 book ai didi

java - 异常处理和日志记录 : Better Practice

转载 作者:行者123 更新时间:2023-12-04 04:43:40 26 4
gpt4 key购买 nike

代码 (Java) 片段

.....
.....
if ( response.check() == checkNumber )
{
String message = "You are looking at Wrong Place";
logger.log( message );
throw new UserAtWrongPlaceException( message );
/* stops here */
}
.....
...
if ( response.check() == somethingElse)
{
......
}

我有代码来检查响应,如果响应等于定义的常量 checkNumber,我想记录消息并抛出异常,但这样做我的代码执行将在此时停止而不是进一步进行。

记录我的消息的更好方法是什么,抛出 UserAtWrongPlaceException 并继续
执行其余的代码?

最佳答案

在 Java 中抛出异常总是会停止该方法的执行。它返回到调用该方法的任何代码段,但有异常。如果该代码捕获到异常,则转到 catch 块,否则,它会进一步向上抛出异常。

也许您正在寻找一种将异常附加到日志的方法?记录器有一个方法:

logger.log(Level.INFO,message,new UserAtWrongPlaceException(message));

当然,您可以抛出一个随机异常,但如果您希望该方法继续运行,则必须捕获它:
try {
if(response.check() == checkNumber) {
String message = "You are looking at Wrong Place";
logger.log(message);
throw new UserAtWrongPlaceException(message);
}
} catch(UserAtWrongPlaceException e) {
//Do something with the exception, or just ignore it.
}

但是,当然,您最好不要抛出异常,因为结果将是相同的,并且实例化异常只会减慢它的速度。

也许您正在寻找一种方法来继续该方法,但在最后抛出异常而不是成功返回。对于这种做法,我会为以后存储异常(尽管公认相当复杂)。像这样:
UserAtWrongPlaceException exception = null;
if(response.check() == checkNumber) {
String message = "You are looking at Wrong Place";
logger.log(message);
exception = new UserAtWrongPlaceException(message);
}
...
if(response.check() == somethingElse) { ... }
...
if(exception != null) {
throw exception;
}
return true;

但是,如果您选择该模式,则必须查看如果这些 if 中的多个引发异常会发生什么情况。在上面的代码片段中,这将导致记录所有异常,但仅抛出最后一个异常。

请记住,方法可以返回或抛出异常。它不能同时做,也不能抛出多个异常。

关于java - 异常处理和日志记录 : Better Practice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com