java.lang.NullPointerException 如何修复

标签 java

这是一个连接池的例子。我认为我已经初始化了所有对象,但出现了空指针异常。我该如何解决这个问题?

package hello;

public class C {

 public  static void  main(String[] args) {
     CConnectionManager con=new CConnectionManager();
     CConnection conn=new CConnection();
     conn=con.GetConnection();

 }

 public static class CConnectionManager {
  private static final int MaxConSize=10;
  private CConnection[] connections ;
  {
  connections=new CConnection[MaxConSize];
  }


  public CConnection GetConnection(){
   for(int i=0;i<connections.length;i++){
    if(1==connections[i].status){
     continue;
    }
    else if(0==connections[i].status){
     connections[i].status=1;
     connections[i].pos=i;
     return connections[i];
    }
   }

   System.out.println("No connection available,Please wait");
   return null;
  }


  public void CloseConnection (CConnection con){

      if(-1==con.pos||0==con.pos){
          System.out.println("No such connection");
      }
      else
          connections[con.pos].status=0;
  }

  public void execute(String sql){

       System.out.println(sql);
      }
}



 public static class CConnection  {
  private int status=0;
  private int pos=-1;


 }

 }






Exception in thread "main" java.lang.NullPointerException
    at hello.C$CConnection.access$0(C.java:55)
    at hello.C$CConnectionManager.GetConnection(C.java:22)
    at hello.C.main(C.java:8)

最佳答案

您声明了一个包含 10 个 CConnection 的数组 (connections=new CConnection[MaxConSize];),但数组中的元素实际上为 null。

因此,在执行以下操作时: if(1==connections[i].status) 它会抛出 NPE

要修复此问题,请在构造函数中实例化您的 CConnection 对象:

private CConnection[] connections;

public CConnectionManager (){
   connections=new CConnection[MaxConSize];
   for(int i = 0; i < connections.length; i++){
        connections[i] = new CConnection();
   }
}

关于java.lang.NullPointerException 如何修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19741256/

相关文章:

java - 字符串反转性能

java - 从 java 连接 Neo4j 时出错

java - 如何从同一实体的数组列表创建不同的实体实例

java - 如何手动记录 JAX-RS 参数的 Swagger 数据模型?

Java 流对映射列表的值求和

java - 如果测试任务在 gradle 项目中失败,则运行停止 tomcat 任务

java - 执行逻辑时 Wicket 口加载图标/弹出窗口

java - 不断从表数据库中获取内容

Java:有没有可能拿一个GUI Panel,输出成图片?

Java:非基于 MAC 的唯一计算机 ID