Creación de objetos
Los elementos que pertenecen a una clase se denominan objetos. Cada uno tiene sus propios valores de los atributos definidos en la clase.
Imagina que una clase es como una plantilla o un molde, y un objeto es algo hecho con esa plantilla. La clase es la definición o plan de cómo será algo, y el objeto sería la versión real y concreta creada a partir de ese plano.
Para construir objetos necesitamos declarar variables cuyo tipo de datos sea una clase. La declaración sigue las mismas reglas que las variables de tipo primitivo:
Clase nombreVariable;
Por ejemplo, si queremos declarar un objeto de la clase Persona realizamos lo siguiente:
Persona p; // p es un objeto de la clase Persona
La diferencia entre una variable de tipo primitivo y una variable objeto es que la variable almacena directamente un valor, mientras que una variable objeto almacena la referencia (dirección de memoria) al objeto. Los objetos funcionan de manera muy similar a los vectores en este aspecto (en realidad los vectores también son objetos).
Para reservar memoria para un objeto necesitamos utilizar el operador new.
Persona persona = new Persona();
En este momento, en la variable p se guarda una referencia a un objeto de la clase Persona. Podemos acceder a sus atributos mediante el operador punto (.).
persona.nombre = "Manuel";
persona.edad = 32;
persona.estatura = 1.70;
Funcionamiento del operador new y referencias
El funcionamiento del operador new es igual que en el caso de los arrays.
Cuando realizamos la llamada al operador new de la clase persona (Persona persona = new Persona();) se busca un espacio libre donde se pueda almacenar el objeto. Imaginemos por ejemplo que cada objeto de la clase persona ocupa 50 bytes:

En la variable persona, Java almacena la dirección de memoria donde se almacena el objeto creado, por ejemplo en este caso en la dirección 0x00000526. Por lo tanto, lo que se almacena es una referencia.

Por lo tanto, también podemos hacer que dos variables apunten a un mismo objeto:
Persona persona1 = new Persona();
Persona persona2 = persona1;

Podemos utilizar de la misma manera el literal null para indicar que una variable no referencia a ningún objeto. Si una variable objeto no reserva memoria, su valor es, al igual que en los arrays: null.
El recolector de basura también busca objetos que no tienen referencias para eliminarlos y liberar memoria.