zoukankan      html  css  js  c++  java
  • 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 cause
    
    java.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     }
  • 相关阅读:
    基于visual c++之windows核心编程代码分析(52)使用WMI 获取进程启动参数
    基于visual c++之windows核心编程代码分析(56)使用winsock搜索蓝牙设备
    这个星期上网找工作,周六准备就去上海了.
    Delphi 中的 XMLDocument 类详解(21) 暂停
    数组与子界
    Delphi 中的 XMLDocument 类详解(17) 上一个节点、下一个节点、父节点
    Delphi 中的 XMLDocument 类详解(19) NodeValue 与 NodeName 的读写区别
    Delphi 中的 XMLDocument 类详解(18) 更好地显示 xml 的测试结果 FormatXMLData 及其他
    Delphi 中的 XMLDocument 类详解(16) 节点列表中的第一个与最后一个节点
    Delphi 中的 XMLDocument 类详解(14) 遍历 XML 文件
  • 原文地址:https://www.cnblogs.com/StrayWolf/p/6035952.html
Copyright © 2011-2022 走看看