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

更新时间:2023-07-31 12:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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 }

本文来源:https://www.bwwdw.com/article/r75m.html

Top