先從一段簡單的錯誤代碼切入,然后在后面提出正確的創建方法。
先考慮這段代碼:
public class Student { private int age; private String name; public void Student() { this.age = 21; this.name = "someone"; } public void setAge (int age) { this.age = age; } public int getAge() { return this.age; } }
public class Test { public static void main(String[] args) { Student[] students = new Student [3]; students[0].setAge(18); System.out.println(students[0].getAge()); } }
運行結果如下,是一個空指針異常:
Exception in thread “main” java.lang.NullPointerException
at Test.main(Test.java:7)
分析原因
Student[] students = new Student [3]; 這一句創建了三個Student的聲明,但並沒有調用Student的構造方法,等價於,
Student s1;
Student s2;
Student s3;
因此,s1, s2, s3的對象實際上並沒有被創建,在內存上也沒有一塊對應的空間。那么在對象還沒有被創建之前,我們自然是不可以調用它的任何方法的。
正確的對象數組創建方法
public class Test { public static void main(String[] args) { int i; Student[] students = new Student [3]; //實例化每一個元素 for (i = 0; i < students.length; i++) { students[i] = new Student(); } students[0].setAge(18); students[1].setAge(30); students[2].setAge(25); System.out.println(students[0].getAge()); System.out.println(students[1].getAge()); System.out.println(students[2].getAge()); } }