gpt4 book ai didi

java - 如何避免在 try 语句中设置变量

转载 作者:行者123 更新时间:2023-12-01 06:41:58 25 4
gpt4 key购买 nike

我的问题是我必须在 try 语句中设置一个变量,否则会出现编译错误。

稍后我需要使用该变量,但它现在超出了范围,至少我是这么认为的。我在 try 语句之外初始化变量并将其设置为 null,我认为它可能可以在外部访问,但我仍然得到 NullPointerException .

下面是代码,为了更容易阅读,删除了很多代码 - 我知道这是糟糕的代码,但我对 Servlet 很陌生,只是想看到它运行时所有移动部件都在做它们应该做的事情。

我创建了另一个类,它调用 createDocs(...) 并传入所需的参数,并且它工作正常。所以这让我很好奇为什么当我打电话 rs.getString("name") 时我得到NullPointerException ,因为这正是我在另一个类中所做的事情(为了方便从主方法运行)并且它按预期工作。

有问题的变量是 ResultSet 变量“rs” -

public class AgReportServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public AgReportServlet() {
super();
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ResultSet rs = null;
try {
rs = docs.getDocs(con, start, end, zone, locality);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

response.setContentType("text/xml");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" +
out.println(
"<table border=\"0\" cellspacing=\"0\" cellpadding=\"6\">\n");

// I have a resultset object need to iterate through it to display the file names

try {
while (rs.next()) { // page through the result set

out.println(
" <tr>\n" +
" <td>: " + rs.getString("name") + "</td>\n" +
" </tr>\n"
);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.println(
"</table></body>\n" +
"</html>"
);

out.flush();
out.close();
}
}

最佳答案

你的问题是,如果这个语句:

rs = docs.getDocs(con, start, end, zone, locality);

抛出异常,然后 rs 的值仍然为 null。所以我要做的就是将循环移到同一个 try-catch block 内。或者,您可以在尝试使用它之前检查它是否仍然为空。

不过,在 try-catch block 之外将值设置为 null 并不是坏代码。如果您希望 rs 变量位于 try block 之外(并且包括在 catch 子句之一内),那么您就必须这样做。您的 rs while 循环可能应该位于同一个 try block 内。

关于java - 如何避免在 try 语句中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com