在学习Java教程时,我一直在使用以下语法来分配数组:
// Ok, all the elements are zero upon creation
int[] a = new int[5];
// I can set all the elements however I want!
for (int i = 0; i < a.length; i++)
a[i] = i+1
自从我开始使用类之后,事情让我感到困惑:
class Employee
{
public Employee(String name, int age) {
emp_name = n;
emp_age = a;
}
void setName(String name) {
emp_name = name;
}
void setAge(int age) {
emp_age = age;
}
private String emp_name;
private String emp_age;
}
我在主函数中使用这个类,如下所示:
Employee[] staff = new Employee[3];
我希望这行代码能够返回一个由三个对象组成的数组,这些对象应该通过构造函数进行默认初始化。
然而,当我执行以下代码时,运行时会抛出异常。
staff[0].setName("Test");
在C++中,这是相当简单的,不需要额外的
new
:Employee *e[3];
经过进一步搜索,我发现我仍然需要为数组中的每个元素分配内存才能开始使用它们。如果是这样,使用new
运算符的目的是什么?它不是已经为数组分配了内存吗?为什么在int
数组中没有这种情况发生?
Employee[] staff = new Employee[3];
是一个大小为三的 Employee 数组,可以容纳三个 Employee 实例。int[] a = new int[5];
是一个包含五个基本整数类型的数组。实质上并没有什么不同,只是使用方式不同而已。 - Shahzeb