我有一个名为user的类,它包含两个变量name和age。
package test;
public class user {
String name;
int age;
}
然后在我的main.java中,我正在创建该类类型的数组。
package test;
public class main {
public static void main(String[] args) {
user[] array = new user[2];
array[0].name = "ryan";
array[0].age = 18;
array[1].name ="Ryan";
array[1].age = 17;
for(int i = 0; i < 1; i++){
System.out.println(array[i].name);
System.out.println(array[i].age);
}
}
}
但是我得到了这个错误。
Exception in thread "main" java.lang.NullPointerException
at test.main.main(main.java:5)
任何帮助?
答案 0 :(得分:2)
user[] array = new user[2];
只是数组的定义,但数组元素未初始化/为NULL。因此,访问属性或方法将导致NullPointerException
。你应该在使用之前初始化数组元素,如下所示:
array[0] = new user();
array[1] = new user();
答案 1 :(得分:2)
默认情况下,引用在Java中初始化为null
- JLS:
对于所有引用类型(§4.3),默认值为null。
所以写array[0].name = "ryan";
就像写null.name = "ryan";
,这会导致异常。
你应该初始化数组中的每个对象。另请注意Java Naming Conventions并将user
更改为User
。
答案 2 :(得分:1)
你也需要制作“新”物品。只有阵列不够
答案 3 :(得分:1)
您只创建了两个User
的地方。写:
array [0] = new User();
你的例子对你有用:
public static void main(String[] args) {
User[] array = new User[2];
array[0] = new User();
array[0].name = "ryan";
array[0].age = 18;
array[1] = new User();
array[1].name ="Ryan";
array[1].age = 17;
for(int i = 0; i < array.length; i++){
System.out.println(array[i].name);
System.out.println(array[i].age);
}
}
答案 4 :(得分:0)
没有对象为
指定值 array[0].name = "ryan";
您所拥有的只是一系列变量,尚未分配任何内容。您需要先为阵列中的每个地址创建一个...
array[0] = new user();
然后设置它的名字。
此外,类名称应为大写User
,而不是user
最后,如果您逐步浏览数组,最好使用它的大小而不是硬编码的数字
for(int i = 0; i < array.length; i++)
更好的是,为每个人做一次
for (user u : array) //for each user in array
{
System.out.println(u.name);
System.out.println(u.age);
}