捕获异常而不进入其try块?

时间:2011-10-14 09:37:24

标签: java exception

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

3 个答案:

答案 0 :(得分:1)

否则无法捕获在执行try块期间未抛出的异常。可能的情况:

    在您InterruptedException电话中"Getting ready..."之前,
  1. log(...)会被引发。 (不可能)

  2. Log方法无法按预期工作,也不会记录您的行。 (可能)您可以通过设置高睡眠时间来检查睡眠是否已执行。这意味着这个原因。

  3. 您还有其他代码段"Backup thread was interrupted..."导致日志输出,并且根本不会执行显示的代码片段。

答案 1 :(得分:0)

我的猜测是日志方法无法正常运行?我不相信可以在不进入try块的情况下输入catch块。另一个替代方法是log方法抛出InterruptedException?

你也可以发布你的日志方法吗?

答案 2 :(得分:0)

如果您输入catch块,则会在try块内抛出异常。周期。

解决您的问题:打印异常的堆栈跟踪,看看log()是否也会抛出异常。