java.lang.NullPointerException的可能原因及处理
java.lang.NullPointerException具体意思是空指针异常,最常见的问题就是没有初始化。
字符串等数据类型没有初始化
类实例(对象)有用具体的类初始化
没有判断是否为空
Eg:
源码:
1 public static BookInformation[] ImFromClassification(String a){ 2
Connection conn = null; 3
PreparedStatement ps = null; 4
ResultSet rs = null; 5
try{ 6
int x = 0; 7
conn = LinkMysql.getDBconnection(); 8
if(conn == null){System.out.println("conn");} 9
String sql="select * from bookinformation where classification=?";10
ps = conn.prepareStatement(sql);11
ps.setString(1, a);12
rs = ps.executeQuery();13
rs.beforeFirst();14
while(rs.next()){15
++x;16
}17
System.out.println(x);18
BookInformation[] a1 = new BookInformation[x];19
rs.first();20
for(int i = 0; i < x; i++){21
//a1[i] = new BookInformation();22
a1[i].setName(rs.getString("name"));23
a1[i].setAuthor(rs.getString("author"));24
a1[i].setClassification(rs.getString("classification"));25
a1[i].setAmount(rs.getInt("amount"));26
a1[i].setPrice(rs.getInt("price"));27
a1[i].setSalvesVolum(rs.getInt("sales_volum"));28
rs.next();29
}30
return a1;31
32
} catch (SQLException e) {33
System.out.println("xxx");34
return null;35
}36
finally{LinkMysql.closeDB(conn, ps, rs);}37
38 }
报错:
1 root cause
2
3 java.lang.NullPointerException
4 Dao.BookInfor.ImFromClassification(BookInfor.java:31)
5 org.apache.jsp.front.home_jsp._jspService(home_jsp.java:120)
6 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
7 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
8 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
9 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
10 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
11 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
12 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
分析:
数组定义(BookInformation[] a1 = new BookInformation[5])之后,没有对每个数组元素初始化。
更改:
1 public static BookInformation[] ImFromClassification(String a){
2 Connection conn = null;
3 PreparedStatement ps = null;
4 ResultSet rs = null;
5 try{
6 int x = 0;
7 conn = LinkMysql.getDBconnection();
8 if(conn == null){System.out.println("conn");}
9 String sql="select * from bookinformation where classification=?";
10 ps = conn.prepareStatement(sql);
11 ps.setString(1, a);
12 rs = ps.executeQuery();
13 rs.beforeFirst();
14 while(rs.next()){
15 ++x;16 }
17 System.out.println(x);
18 BookInformation[] a1 = new BookInformation[x];
19 rs.first();
20 for(int i = 0; i < x; i++){
21 a1[i] = new BookInformation();
22 a1[i].setName(rs.getString("name"));
23 a1[i].setAuthor(rs.getString("author"));
24 a1[i].setClassification(rs.getString("classification"));
25 a1[i].setAmount(rs.getInt("amount"));
26 a1[i].setPrice(rs.getInt("price"));
27 a1[i].setSalvesVolum(rs.getInt("sales_volum"));
28 rs.next();
29 }
30 return a1;
31
32 } catch (SQLException e) {
33 System.out.println("xxx");
34 return null;35 }
36 finally{LinkMysql.closeDB(conn, ps, rs);}
37
38 }