public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age= age;
}
Person Rome[] = new Person[10];
public void initializes {
Rome[0]= new Person ("Antonio",20);
Rome[1]= new Person ("Marco",11);
//...
Rome[9]= new Person("Giuseppe",27);
}
public void printName(){
for(Person x : Rome){
System.out.println(x.name);
}
}
//TEST CLASS
public static void main (String args[]){
Person obj = new Person();
obj.initializes();
obj.printName(); // Exception in thread "main" java.lang.NullPointerException
}
}
为什么每个作品的打印只是用原始对象,如果我想打印一个复杂对象的属性不起作用?
答案 0 :(得分:0)
数组索引从0开始,而不是从1开始。初始化包含10个Persons插槽的数组,但第一个(位置0)为null。所以你得到一个NullPointerException。
从0开始初始化以解决初始问题。但是,数组仍然包含10个项目(其中7个为null),因此循环将在打印三个名称后继续,然后仍然会抛出NullPointerException。
工作代码,但在打印三个名称后抛出NullPointerException:
public class Person {
String name;
int age;
public Person(){
// No-arg constructor required
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
Person Rome[] = new Person[10];
public void initializes(){
Rome[0] = new Person("Antonio", 20);
Rome[1] = new Person("Marco", 11);
Rome[2] = new Person("Giuseppe", 27);
}
public void printName() {
for (Person x : Rome) {
System.out.println(x.name);
}
}
}
考试类: 公共课测试{
public static void main (String args[]){
Person obj = new Person();
obj.initializes();
obj.printName();
}
}
如果您希望能够动态更改人数,请使用ArrayList。
然后代码变为:
import java.util.ArrayList;
public class Person {
String name;
int age;
public Person(){
// No-arg constructor required
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
ArrayList<Person> Rome = new ArrayList<>();
public void initializes(){
Rome.add(new Person("Antonio", 20));
Rome.add(new Person("Marco", 11));
Rome.add(new Person("Giuseppe", 27));
}
public void printName() {
for (Person x : Rome) {
System.out.println(x.name);
}
}
}
答案 1 :(得分:0)
您需要初始化Rome[0]
对象。
它看起来像是:
public void initializes {
Rome[0]= new Person ("name",00);
Rome[1]= new Person ("Antonio",20);
//...
}
如果您在没有对象类的情况下初始化对象,代码会更好。例如,在测试类中:
Person[] Romeo = new Person[] {
new Person(name, 00),
//...
}
答案 2 :(得分:0)
结果:
文件名Test.java
//并且有代码。它是原型,我做了编译,但它是你的一个例子
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age= age;
}
public void printName(){
System.out.println(name);
}
}
//Test class
public class Test {
public static void main (String args[]){
Person[] Romeo = new Person[] {
new Person("name", 00),
//...
}
for(int i = 0; i < 10; i++)//or another loop style
Romeo[i].printName();
}
}