Вопрос по arrays, constructor, java – выделить для массива, а затем с помощью конструктора

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

В приведенном выше коде мы использовали дважды «новый». Этот код правильный или неправильный? Первый - для выделения массива. Но почему второй? Это из лекционных заметок.

Хорошо, я понял, как это происходит. - & GT; после выделения текста выполните Ctrl K. Спасибо.. oiyio
(В редакторе есть кнопка справки (?вверху справа), где есть примеры того, как форматировать код. Проще говоря, выберите весь свой код и нажмите на{} или нажмите Ctrl + K) Mat
Второй «новый человек» правильно, если вы хотите вставить новую персону со случайным именем и фамилией в каждую запись массива & quot; people. & quot; Что касается публикации кода, обычно легко скопировать и вставить код, и для каждой строки, которая не была предварительно просмотрена как код, можно вставить четыре пробела. Я надеюсь, что это ответило на ваши вопросы, я не совсем понял, что вы имели в виду. Chris

Ваш Ответ

3   ответа
10

new Person[20] создает массив, который может содержать 20 ссылок наPerson объекты. Это не создает никакого фактическогоPerson объекты.

new Person(...) создаетPerson объект.

Критическое различие, которое следует здесь сделать, состоит в том, что в отличие от C или C ++,new Person[20] не выделяет память на 20Person объекты. Массив не содержит реальных объектов; он содержит толькоreferences им.

В Java распределение не обрабатывается отдельно от конструкции.new Person[20] выделяет память для массива из 20 ссылок, а затем инициализирует его какPerson[]. new Person(...) выделяет память дляPerson объект, а затем вызываетPerson конструктор.
В каком из них выделение сделано ?? oiyio
10

Линия:

Person[] people = new Person[20]

выделяет массив, полный ссылок наnull в то время как линия:

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

заполняет его [массив] путем создания экземпляров объектов типаPersonи присвоение ссылки в массиве.

Нет,new обрабатывает как размещение и строительство. Массивы не имеют конструкторов, ноnew Person[20] и выделяет и инициализирует массив.
Хорошо. Затем "новый" Ключевое слово используется не только для выделения. Оно может использоваться для вызова конструкторов без выделения. (потому что распределение может быть сделано ранее) oiyio
2

Person[] people = new Person[20];

ам нужно заполнить его определенными людьми (со случайным именем и фамилией в этом примере).

Похожие вопросы