【发布时间】:2015-10-02 09:33:38
【问题描述】:
到目前为止,在阅读一些 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];是一个大小为 3 的 Employee 数组,可以容纳三个 Employee 实例。int[] a = new int[5];是一个包含 5 个 int 的原始整数数组。没有什么不同,只是使用方式不同。 -
请删除 C++ 标签,因为您的问题不是关于 C++,而是关于 Java。 Java 和 C++ 是不同的语言,处理数组的方式也不同。