我有一个有趣的问题。我的代码块如下。问题是:日志文件不包含“准备睡觉..”行,但包含“备份线程被中断...”行。
我的问题:是否有可能在不进入try块的情况下捕获异常?
long sleepTime = runtime.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
try {
log("Getting ready to sleep...(" + sleepTime + ")");
Thread.sleep(sleepTime);
Database db = new Database();
log(db.performDatabaseBackup());
// Set it to run the next day.
runtime.add(Calendar.DATE, 1);
} catch (InterruptedException ie) {
log("Backup thread was interrupted...");
}
编辑:日志方法
private void log(String message) {
Logger.debug(this, message);
}
和
Logger.debug
public static void debug(
Object obj,
String message ){
debug( obj.getClass(), message );
}
public static void debug(
String className,
String message )
{
try
{
Class inputClass = Class.forName( className );
debug( inputClass, message );
}
catch ( ClassNotFoundException e )
{
debug( ( Class )null, message );
}
}
最佳答案
不,不可能捕获在执行其try
块期间未引发的异常。可能的情况:
在登录InterruptedException
之前(即在您的"Getting ready..."
呼叫中)会抛出log(...)
。 (不太可能)
日志方法无法按预期方式工作,并且不会记录您的行。 (可能)您是否可以通过设置较高的睡眠时间来检查是否执行了睡眠。这暗示了这个原因。
您还有其他代码记录"Backup thread was interrupted..."
导致日志输出,并且根本不执行所提供的代码片段。
关于java - 捕获异常而不进入它的try块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7765752/