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());
}
}
}
In above code, we used twice "new". Is this code is correct or wrong? First one is for allocation of array. But why the second one? It's from lecture notes.
new Person[20]
creates an array that can hold 20 references toPerson
objects. It does not create any actualPerson
objects.new Person(...)
creates aPerson
object.The critical distinction to make here is that unlike in C or C++,
new Person[20]
does not allocate memory for 20Person
objects. The array does not contain the actual objects; it only contains references to them.Yes, it is correct.
The line:
allocates the array, full of references to
null
while the line:fills it [the array] by instantiating objects of type
Person
, and assigning the reference in the array.only allocates memory for objects Person (filled with nulls). Then you need to fill it with particular Persons (with random name and surname int this example).