3

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

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

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

  • В каком из них выделение сделано ??

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

    от
  • Нет,new обрабатывает как размещение и строительство. Массивы не имеют конструкторов, ноnew Person[20] и выделяет и инициализирует массив.

    от
  • Хорошо. Затем "новый" Ключевое слово используется не только для выделения. Оно может использоваться для вызова конструкторов без выделения. (потому что распределение может быть сделано ранее)

    от oiyio
  • Второй «новый человек» правильно, если вы хотите вставить новую персону со случайным именем и фамилией в каждую запись массива & quot; people. & quot; Что касается публикации кода, обычно легко скопировать и вставить код, и для каждой строки, которая не была предварительно просмотрена как код, можно вставить четыре пробела. Я надеюсь, что это ответило на ваши вопросы, я не совсем понял, что вы имели в виду.

    от Chris
  • (В редакторе есть кнопка справки (?вверху справа), где есть примеры того, как форматировать код. Проще говоря, выберите весь свой код и нажмите на{} или нажмите Ctrl + K)

    от Mat
  • Хорошо, я понял, как это происходит. - & GT; после выделения текста выполните Ctrl K. Спасибо..

    от oiyio
  • 10

    Да, это правильно.

    Линия:

    Person[] people = new Person[20]
    

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

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

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

  • 10

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

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

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

  • 2

    выделяет только память для объектов Person (заполнено нулями). Затем в

    Person[] people = new Person[20];
    

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