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。
这是一个你用来学习的代码,所以类名、变量名都比较随意。但是,个人建议,每一次写代码都请认真对待,方便以后自己阅读。
类名首字母大写,这在Java里面是亘古不变的!
尽可能不要使用 a b c 这类没意义的变量名。过段时间你自己都不记得这代码写了什么
不要用 string 这类与关键字类似的名称作变量名。会混淆的
没意义的包不要引入
具体错误原因:
private Project002Test a;
仅只是声明了变量a为 Project002Test 这个类型,并未创建具体对象。因此调用 getA() 返回 null.
修改方式:
声明时直接创建
调用时判断创建