[Java基础] 创建一个对象数组

best365体育入口中文版 时间: 2025-08-21 22:41:18 作者: admin 查阅次数: 6247 公众评价: 633
[Java基础] 创建一个对象数组

先从一段错误的代码切入,然后在后面提出正确的创建方法。

先考虑这段代码:

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());

}

}

运行结果:

18

30

25

思考

现在我们知道,在使用new关键字声明一个对象数组时需要再将其实例化。那么为什么当我们声明一个基础数据类型的数组时比如:

int[] a = new int[5];

就不需要将Integer类创建一个对象呢?我猜测应该是在编译的过程中,编译器会对new关键字之后的基础数据类型,如int,double,String自动加上其构造函数,只是我们作为用户对这个过程并不可见。在网上尝试找相关资料,但没有找到,看来我还是太菜了。

参考资料:

http://stackoverflow.com/questions/5364278/creating-an-array-of-objects-in-java

关联

谈谈作为合格的帮主如何策划一期帮会活动
best365体育入口中文版

谈谈作为合格的帮主如何策划一期帮会活动

📅 08-14 👁️ 1186
出家人为什么不能结婚?
365bet主页器

出家人为什么不能结婚?

📅 07-26 👁️ 179
解决KingRoot闪退问题的方法
beat365体育亚洲

解决KingRoot闪退问题的方法

📅 07-07 👁️ 5643

链接