【问题标题】:Finally block not working in JAVA Stored procedure for Oracle最后阻止在 Oracle 的 JAVA 存储过程中不起作用
【发布时间】:2012-04-15 23:52:06
【问题描述】:

当我编译下面的代码时,它显示错误“找不到符号变量” 但是如果我在 finally 块中注释代码,我就能成功编译。

请指教。

public static int writeFile (String p_file_path, String p_data) throws Exception 
{
  try {
    FileWriter outFile = new FileWriter(p_file_path,true);
    PrintWriter out = new PrintWriter(outFile);
    out.println(p_data);
  } catch (Exception  e) {
  } finally {
    out.close();
  }
  return SUCCESS;
}

【问题讨论】:

    标签: java scope try-catch-finally


    【解决方案1】:

    如果你想在 finally 块中引用它,你需要在 try-block 之外定义“out”,类似于

    PrintWriter out = null;
    try
    {
        FileWriter outFile = new FileWriter(p_file_path,true);
        out = new PrintWriter(outFile);
        out.println(p_data);
    }
    finally
    {
        if (out != null)
            out.close();
    }
    

    【讨论】:

      【解决方案2】:

      您在 try 块中声明 out。这意味着一旦您离开 try-finally 语句的 try 部分,它就超出了范围。您可以在 try 语句之外声明它并在 finally 块中进行空检查,或者使用 Java 7 的 try-with-resources 语句。

      PrintWriter out;
      try {
          out = ...
      } finally {
          if(out != null) {
              out.close();
          }
      }
      

      try(PrintWriter out = ...) {
      }
      

      【讨论】:

      • 嘿杰弗里。谢谢。在 try 语句之外声明是有效的。
      • eis 的回答更好,因为他初始化了变量out 并为我保存了一个编译器错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2014-09-23
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      相关资源
      最近更新 更多