首页 > 代码库 > java.lang.NullPointerException的可能原因及处理

java.lang.NullPointerException的可能原因及处理

java.lang.NullPointerException的可能原因及处理

java.lang.NullPointerException具体意思是空指针异常,最常见的问题就是没有初始化。

  1. 字符串等数据类型没有初始化
  2. 类实例(对象)有用具体的类初始化
  3. 没有判断是否为空

 

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     }

报错:

root causejava.lang.NullPointerException	Dao.BookInfor.ImFromClassification(BookInfor.java:31)	org.apache.jsp.front.home_jsp._jspService(home_jsp.java:120)	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)	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     }

 

java.lang.NullPointerException的可能原因及处理