EQUIPO 4. INSTANCIACIÓN DE UNA
CLASE.
Los tipos simples de Java
describían el tamaño y los valores de las variables. Cada vez que se crea una
clase se añade otro tipo de dato que se puede utilizar igual que uno de los
tipos simples. Por ello al declarar una nueva variable, se puede utilizar un
nombre de clase como tipo. A estas variables se las conoce como referencias a
objeto.
Todas las referencias a
objeto son compatibles también con las instancias de subclases de su tipo. Del
mismo modo que es correcto asignar un byte a una variable declarada como int,
se puede declarar que una variable es del tipo MiClase y guardar una referencia
a una instancia de este tipo de clase:
MiPunto p;
Esta es una declaración de
una variable p que es una referencia a un objeto de la clase MiPunto, de
momento con un valor por defecto de null. La referencia null es una referencia
a un objeto de la clase Object, y se podrá convertir a una referencia a
cualquier otro objeto porque todos los objetos son hijos de la clase Object.
CONSTRUCTORES
Las clases pueden
implementar un método especial llamado constructor. Un constructor es un método
que inicia un objeto inmediatamente después de su creación. De esta forma nos
evitamos el tener que iniciar las variables explícitamente para su iniciación.
El constructor tiene
exactamente el mismo nombre de la clase que lo implementa; no puede haber
ningún otro método que comparta su nombre con el de su clase. Una vez definido,
se llamará automáticamente al constructor al crear un objeto de esa clase (al
utilizar el operador new).
Por ejemplo:
MiPunto( ) {
inicia( -1, -1 );
}
Este constructor denominado
constructor por defecto, por no tener parámetros, establece el valor -1 a las
variables de instancia “X” y “Y” de los objetos que construya.
Este otro constructor recibe
dos parámetros:
MiPunto( int paraX, int paraY ) {
inicia( paramX, paramY );
}
EL OPERADOR NEW
El operador new crea una
instancia de una clase (objetos) y devuelve una referencia a ese objeto. Por
ejemplo:
MiPunto p2 = new MiPunto(2,3);
Este es un ejemplo de la
creación de una instancia de MiPunto, que es controlador por la referencia a
objeto p2.
Hay una distinción crítica
entre la forma de manipular los tipos simples y las clases en Java: Las
referencias a objetos realmente no contienen a los objetos a los que
referencian. De esta forma se pueden crear múltiples referencias al mismo
objeto.
LA REFERENCIA THIS
Java incluye un valor de
referencia especial llamado this, que se utiliza dentro de cualquier método
para referirse al objeto actual. El valor this se refiere al objeto sobre el
que ha sido llamado el método actual. Se puede utilizar this siempre que se
requiera una referencia a un objeto del tipo de una clase actual. Si hay dos
objetos que utilicen el mismo código, seleccionados a través de otras
instancias, cada uno tiene su propio valor único de this.
LA DESTRUCCIÓN DEL OBJETO
Cuando un objeto no va a ser
utilizado, el espacio de memoria de dinámica que utiliza ha de ser liberado,
así como los recursos que poseía, permitiendo al programa disponer de todos los
recursos posibles. A esta acción se la da el nombre de destrucción del objeto.
En Java la destrucción se
puede realizar de forma automática o de forma personalizada, en función de las
características del objeto.
La destrucción por defecto:
Recogida de basura
El intérprete de Java posee
un sistema de recogida de basura, que por lo general permite que no nos
preocupemos de liberar la memoria asignada explícitamente.
El recolector de basura será
el encargado de liberar una zona de memoria dinámica que había sido reservada
mediante el operador new, cuando el objeto ya no va a ser utilizado más durante
el programa (por ejemplo, sale del ámbito de utilización, o no es referenciado
nuevamente).
A veces una clase mantiene
un recurso que no es de Java como un descriptor de archivo o un tipo de letra
del sistema de ventanas. En este caso sería acertado el utilizar la
finalización explícita, para asegurar que dicho recurso se libera. Esto se hace
mediante la destrucción personalizada, un sistema similar a los destructores de
C++.
Para especificar una
destrucción personalizada se añade un método a la clase con el nombre finalize:
class ClaseFinalizada{
ClaseFinalizada() { //
Constructor
// Reserva del recurso no Java o recurso
compartido
}
protected void finalize() {
// Liberación del recurso no Java o recurso
compartido
}
}
No hay comentarios:
Publicar un comentario