Ank*_*kur 0 java scope try-catch
我的问题是我必须在try语句中设置一个变量,否则我会收到编译错误.
后来我需要使用那个变量,但它现在超出了范围,或者我相信.我在try语句之外初始化变量并将其设置为null,我认为它可能在外面可以访问,但我仍然得到一个NullPointerException.
代码在下面,大量的内容使得阅读变得更容易 - 我知道它是错误的代码,但我是Servlets的新手,只是想看到它运行所有移动部件做他们应该做的事情.
我创建了另一个调用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();
}
}
Run Code Online (Sandbox Code Playgroud)
你的问题是如果这句话:
rs = docs.getDocs(con, start, end, zone, locality);
Run Code Online (Sandbox Code Playgroud)
抛出异常然后rs的值仍然是null.所以我要做的是将循环移动到同一个try-catch块中.或者,您可以在尝试使用它之前检查它是否仍为null.
尽管如此,在try-catch块之外将值设置为null并不是坏代码.如果你想在try块之外使用rs变量(并且包含其中一个catch子句),那就是你必须要做的.你的rs while循环应该只是在同一个try块中.
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |