我试图访问一个名为" Person"它只有一个参数," name"这是我的班级:
class person{
String name;
public void setName(String name){ this.name = name; }
public String getName(){ return name; }
}
然后在我的主要课程中,我得到了以下内容:
public class exercise{
public static void main(String []args){
Person person [] = new Person [20];
person[0].setName("zgur");
System.out.printf(""+person[0].getName());
}
}
我收到错误:线程中的异常" main"显示java.lang.NullPointerException
我缺少什么和/或做错了什么?
感谢。
答案 0 :(得分:2)
您正在创建一个数组但不填充对象。想想一个像蛋箱一样的参考类型。在你用鸡蛋填满之前,你不能使用箱子里的任何鸡蛋。
所以改为:
// note that class names should begin with an uppercase letter
public class Exercise{
public static void main(String []args){
Person[] people = new Person [20];
for (int i = 0; i < people.length; i++) {
people[i] = new Person(); }
people[0].setName("zgur");
System.out.printf("" + people[0].getName());
}
}
如果这是我的代码,我考虑使用ArrayList<Person>
,只在需要时添加一个Person。例如
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Stan")); // assuming that a String constructor exists
personList.add(new Person("Bill"));
}
答案 1 :(得分:2)
您需要以下内容:
Person[] people = new Person[20];
people[0] = new Person("Harry");
people[1] = new Person("Alan");
...etc.
答案 2 :(得分:2)
请注意,此处您不创建Person实例:
人[] =新人[20];
在这里,您可以创建一个包含20个引用的数组,但每个引用都使用 null 进行初始化。 所以访问zeroe的元素为
人[0] .setName( “zgur”);
你正在获得NPE。
如果您确实需要使用数组来处理Person实例,请确保已初始化您要处理的项目:
person [0] = new Person();
人[0] .setName( “whateverYouNeed”);
请注意:最好使用以下形式的数组创建:
人[]人=新人[20];
在引用类型后面带[]。