NOTA: La traducción de esta documentación es un esfuerzo personal y voluntario, no es un documento oficial de Sun Microsystems ni Oracle ni está patrocinado por ninguna de estas empresas. Los documentos originales (en inglés) están disponibles en: http://docs.oracle.com/javase/tutorial/.
Dirija cualquier comentario, petición, felicitación, etc. a tutorialesjava_@RROBA_codexion.com.
Si desea ayudar a mantener en funcionamiento esta web, colaborar con la traducción de estos documentos o necesita que se traduzca algún capítulo en concreto puede realizar una donación directa mediante Paypal:
Creación de objetos (Los tutoriales Java™ > El lenguaje Java > Clases y objetos)
Ruta: El lenguaje Java
Lección: Clases y objetos
Sección: Objetos
Creación de objetos
Página inicial > El lenguaje Java > Clases y objetos
Creación de objetos
Como sabe, una clase proporciona los planos para un objeto; puede crear un objeto de una clase. Cada una de las siguientes sentencias tomadas del programa CreateObjectDemo crea un objeto y lo asigna a una variable:
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
 
La primera línea crea un objeto de la clase Point, mientras que la segunda y la tercera crean un objeto de la clase Rectangle.

Cada una de estas sentencias tiene tres partes:

  1. Declaración: El código en negrita son declaraciones de variables que asocian un nombre de variable con un tipo de objeto.
  2. Instanciación: La palabra clave new es un operador Java que crea el objeto.
  3. Inicialización: El operador new precede a una llamada a un constructor, que inicializa el objeto nuevo.

Declarar una variable para que se refiera a un objeto

Anteriormente hemos aprendido que, para declarar una variable, se debe escribir:
tipo nombre;
 
Esto le indica al compilador que se utilizará nombre para referirse a datos cuyo tipo es tipo. Con una variable primitiva esta declaración también reserva la cantidad adecuada de memoria para la variable.

También se puede declarar una variable de referencia en su propia línea. Por ejemplo:

Point originOne;
 
Si declara originOne de este modo, su valor será indeterminado hasta que en efecto se cree un objeto y se le asigne. La simple declaración de una variable de referencia no crea un objeto. Para ello necesitará utilizar el operador new tal y como se describe en la siguiente sección. Debe asignar un objeto a originOne antes de utilizarlo en su código. De lo contrario obtendrá un error de compilación.

Una variable en este estado, que no referencia a ningún objeto, se puede ilustrar del siguiente modo (el nombre de variable, originOne, más una referencia apuntando a nada):

originOne is null.

Instanciar una clase

El operador new instancia una clase reservando memoria para un objeto nuevo y devolviendo una referencia a esa memoria. El operador new también invoca al constructor de objetos.

Nota: La frase «instanciar una clase» significa lo mismo que «crear un objeto».Cuando se crea un objeto, se crea una «instancia» de una clase, por lo tanto «se instancia» una clase.

El operador new requiere un solo argumento posterior: una llamada a un constructor. El nombre del constructor proporciona el nombre de la clase que se instanciará.

El operador new devuelve una referencia al objeto que ha creado. Esta referencia normalmente se asigna a una variable del tipo apropiado, como:

Point originOne = new Point(23, 94);
 
La referencia devuelta por el operador new no tiene por qué ser asignada a una variable. También se puede usar directamente en una expresión. Por ejemplo:
int height = new Rectangle().height;
 
Esta sentencia se tratará en la siguiente sección.

Inicializar un objeto

Este es el código de la clase Point:
public class Point {
    public int x = 0;
    public int y = 0;
    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}
 
Esta clase contiene un solo constructor. Se puede reconocer a un constructor porque su declaración utiliza el mismo nombre que la clasey no tiene tipo de retorno. El constructor de la clase Point toma dos argumentos enteros, como declarado en el código (int a, int b). La siguiente sentencia proporciona 23 y 94 como valores para esos argumentos:
Point originOne = new Point(23, 94);
 
El resultado de ejecutar esta sentencia está ilustrado en la siguiente figura:
originOne now points to a Point object.
Éste es el código de la clase Rectangle, que contiene cuatro constructores:
public class Rectangle {
    public int width = 0;
    public int height = 0;
    public Point origin;

    // cuatro constructores
    public Rectangle() {
        origin = new Point(0, 0);
    }
    public Rectangle(Point p) {
        origin = p;
    }
    public Rectangle(int w, int h) {
        origin = new Point(0, 0);
        width = w;
        height = h;
    }
    public Rectangle(Point p, int w, int h) {
        origin = p;
        width = w;
        height = h;
    }

    // un método para mover el rectángulo
    public void move(int x, int y) {
        origin.x = x;
        origin.y = y;
    }

    // un método para calcular el área del rectángulo
    public int getArea() {
        return width * height;
    }
}

 
Cada constructor le permite proporcionar valores iniciales para el tamaño y anchura del rectángulo, utilizando tanto tipo primitivos como de referencia. Si una clase tiene varios constructores, éstos deben tener diferentes firmas. El compilador Java diferencia los constructores basándose en la cantidad y el tipo de los argumentos. Cuando el compilador Java se encuentra con el siguiente código sabe que debe llamar al constructor de la clase Rectangle que necesita un argumento de tipo Point seguido de dos enteros:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
 
Esto llama a uno de los constructores de Rectangle que inicializa origin a originOne. El constructor tamién fija width a 100 y height a 200. Ahora hay dos referencias al mismo objeto Point object - un objeto puede tener varias referencias a él, como se muestra en la siguiente figura:
Now the rectangle's origin variable also points to the Point.
La siguiente línea de código llama al constructor de Rectangle que necesita dos argumentos enteros que proporcionan los valores iniciales para width y height. Si inspecciona el código dentro del constructor verá que crea un nuevo objeto Point cuyos valores x e y se inicializan a 0:
Rectangle rectTwo = new Rectangle(50, 100);
 
El constructor de Rectangle utilizado en la siguiente sentencia no toma ningún argumento, por lo que se denomina un constructor sin argumentos:
Rectangle rect = new Rectangle();
 
Todas las clases tienen por lo menos un constructor. Si una clase no declara uno explícitamente, el compilador Java proporciona automáticamente un constructor sin argumentos, llamado el constructor predeterminado. Este constructor predeterminado llama al cosntructor sin argumentos de la clase padre, o el constructor de Object si la clase no tiene otro padre. Si el padre no tiene constructor (Object no lo tiene), el compilador rechazará el programa.
Pagina anterior: Objetos
Página siguiente: Uso de objetos