代码(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)
{
......
}
我有代码来检查响应,如果响应等于定义的constatnt checkNumber,我想记录消息并抛出异常,但这样做我的代码执行将在此时停止,而不是继续进行。
记录我的消息的更好方法是,抛出UserAtWrongPlaceException并继续 执行其余代码?
答案 0 :(得分:2)
在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;
但是,如果您选择该模式,则必须查看如果多个ifs抛出异常会发生什么。在上面的代码片段中,这将导致记录所有异常但仅抛出最后一个异常。
请记住,方法可以返回或抛出异常。它不能同时做到这两点,也不能抛出多个异常。
答案 1 :(得分:1)
如果要打印堆栈跟踪但不停止执行,可以使用:
new UserAtWrongPlaceException( message ).printStackTrace();