【问题标题】:allocating for array and then using constructor分配数组,然后使用构造函数
【发布时间】:2012-04-20 03:00:17
【问题描述】:

Person.java

public class Person {
    public String firstName, lastName;

    public Person(String firstName,
            String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFullName() {
        return(firstName + " " + lastName);
    }
}

PersonTest.java

public class PersonTest {
    public static void main(String[] args) {
        Person[] people = new Person[20];              //this line .
        for(int i=0; i<people.length; i++) {
            people[i] = 
                new Person(NameUtils.randomFirstName(),
                        NameUtils.randomLastName());  //this line
        }
        for(Person person: people) {
            System.out.println("Person's full name: " +
                    person.getFullName());
        }
    }
}

在上面的代码中,我们使用了两次“new”。这段代码是正确的还是错误的?第一个用于分配数组。但为什么是第二个?来自讲义。

【问题讨论】:

  • 第二个“新人”是正确的,假设您想在数组“人”的每个条目中插入一个具有随机名字和姓氏的新人。至于发布代码,通常很容易复制粘贴代码,并且对于未作为代码预览的每一行,您可以插入四个空格。我希望这能解决您的问题,我不完全确定您的意思。
  • (编辑器中有一个帮助按钮(?,右上角),其中包含如何格式化代码的示例。简单地说,选择所有代码并单击 {} 按钮,或者按 Ctrl+K)
  • 好的,我知道了。 -> 选择文本后,按 ctrl k 。谢谢..

标签: java arrays constructor allocation


【解决方案1】:

new Person[20] 创建一个可以容纳 20 个对 Person 对象的引用的数组。它不会创建任何实际的 Person 对象。

new Person(...) 创建一个Person 对象。

这里的关键区别在于,与 C 或 C++ 不同,new Person[20] 不会为 20 个Person 对象分配内存。该数组不包含实际对象;它只包含对它们的引用

【讨论】:

  • 在 Java 中,分配不是与构造分开处理的。 new Person[20] 为包含 20 个引用的数组分配内存,然后将其初始化为 Person[]new Person(...)Person 对象分配内存,然后调用Person 构造函数。
【解决方案2】:
Person[] people = new Person[20];

只为对象 Person 分配内存(用空值填充)。然后你需要用特定的人填充它(在这个例子中使用随机的名字和姓氏)。

【讨论】:

    【解决方案3】:

    是的,没错。

    行:

    Person[] people = new Person[20]
    

    分配数组,其中包含对null 的引用,而行:

    new Person(NameUtils.randomFirstName(),
                          NameUtils.randomLastName());  //this line
    

    通过实例化Person 类型的对象并在数组中分配引用来填充它[数组]。

    【讨论】:

    • Ok。那么“new”关键字不仅用于分配。它可以用于调用构造函数而不分配。(因为分配可能在前面完成)
    • 不,new 处理分配和构造。数组没有构造函数,但new Person[20] 既分配又初始化数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2012-12-01
    • 2015-03-12
    • 2022-10-23
    • 2012-01-29
    • 2010-11-10
    相关资源
    最近更新 更多