我有一个有趣的问题。我的代码块如下。问题是:日志文件不包含“准备睡觉..”行,但包含“备份线程被中断...”行。
我的问题:是否有可能在不进入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/

10-10 04:26