java 自己定义的类型的数组的使用问题

自己定义了一个类People

然后在main中想造一个由People元素组成的数组

结果就报错了。。。何解?
public class Caogao {

public static void main(String[] args) {

People[] n = new People[3];
n[0].age = 1;
n[1].age = 2;
n[2].age = 3;
for(int i = 0; i < n.length; i++) {
System.out.println(n[i].age);
}

}

}

public class People {
int age;
double weight;
String name;

}

//people[] 数组里面放的是对象,你还没有new 对象的实例 ,怎么可能取到他的成员变量。
改成如下:
  People[] n = new People[3];
   for(int i = 0;i < 3;i++){
     n[i] = new People();                  
     n[i].age = i;
   } 

追问

还是有错啊

追答

//你多了个age。。。

 

n[i].age=new People() ; 改成  n[i]=new People();

追问

嗯嗯。。。是对的
可是还是有点不明白,明明在这里
People[] n = new People[3];已经为n分配了内存空间,可为什么还要再在for里面在用new分配空间?

追答

People[] n = new People[3];已经为n分配了内存空间,只是分配了空间 ,里面什么东西都没啊 ,他就相当于给人 分了三个房子,这时候 人还没住进去。 new People() 后 人才主进去了,你才能访问人的年龄等属性 。这样明白了吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-29
People数组 放的是People的对象, 你没建对象 就没有内存空间 然后就开始赋值 肯定就错啦追问

那应该怎么改呢。。。每次赋值前都用new吗

追答

public class Caogao {

public static void main(String[] args) {

People[] n = new People[3];
n[0] = new People(1);
n[1] =new People(2);
n[2] = new People(3);
for(int i = 0; i < n.length; i++) {
System.out.println(n[i].age);
}

}

}
public class People {
int age;
double weight;
String name;

public People(){
}
//加个 构造方法就好
public People(int age){
this.age = age;
}
}

第2个回答  2013-08-29
因为n[0]是一个null ,null去点,当然会空指针。下面的代码同理
相似回答