首页 > 开发 > HTML > 正文

java初始化的数组为什么拿不到值,报错了.

2017-09-09 13:19:17  来源: 网友分享

project001Test.java

package project001.test;import java.io.IOException;import java.util.ArrayList;import java.util.List;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;public class project001Test {    private project002Test a;    public project002Test getA() {        return a;    }    public void setA(project002Test a) {        this.a = a;    }    public static void main(String[] arg) throws IOException{        project001Test p1 = new project001Test();        project002Test p2 = p1.getA();        System.out.println(p2.getString()[0]);    }}

project002Test.java

package project001.test;public class project002Test {    private String[] string = {"1","2"};    public String[] getString() {        return string;    }    public void setString(String[] string) {        this.string = string;    }}

报错信息:

Exception in thread "main" java.lang.NullPointerException    at project001.test.project001Test.main(project001Test.java:27)

已经给了string数组的初始值了啊.{"1","2"} 为什么还报错?

解决方案

真是蛋痛的代码~
原因是:
创建对象 project001Test 时,其中的属性只是被声明的,但是没被初始化。导致属性 a 为 null。调用 getA() 返回的是 null。


这是一个你用来学习的代码,所以类名、变量名都比较随意。但是,个人建议,每一次写代码都请认真对待,方便以后自己阅读。

  1. 类名首字母大写,这在Java里面是亘古不变的!

  2. 尽可能不要使用 a b c 这类没意义的变量名。过段时间你自己都不记得这代码写了什么

  3. 不要用 string 这类与关键字类似的名称作变量名。会混淆的

  4. 没意义的包不要引入

具体错误原因:
private Project002Test a;
仅只是声明了变量a为 Project002Test 这个类型,并未创建具体对象。因此调用 getA() 返回 null.
修改方式:

  1. 声明时直接创建

    private Project002Test a = new Project002Test();
  1. 调用时判断创建

    private Project002Test a;    public Project002Test getA() {      if (a == null) {        a = new Project002Test();      }      return a;    }