Manual de Java

 
 
 

Mapa Web

 
borde   borde
Portada arrow Capítulos del manual de Java arrow Referencias

 

Referencias Imprimir E-mail

Las referencias en Java no son punteros ni referencias como en C++. Este hecho crea un poco de confusión entre los programadores que llegan por primera vez a Java. Las referencias en Java son identificadores de instancias de las clases Java. Una referencia dirige la atención a un objeto de un tipo específico. No tenemos por qué saber cómo lo hace ni necesitamos saber qué hace ni, por supuesto, su implementación.

Pensemos en una referencia como si se tratase de la llave electrónica de la habitación de un hotel. Vamos a utilizar precisamente este ejemplo del Hotel para demostrar el uso y la utilización que podemos hacer de las referencias en Java. Primero crearemos la clase Habitacion , implementada en el fichero Habitacion.java , mediante instancias de la cual construiremos nuestro Hotel:

public class Habitacion {
private int numHabitacion;
private int numCamas;
public Habitacion() {
habitacion( 0 );
}
public Habitacion( int numeroHab ) {
habitacion( numeroHab );
}
public Habitacion( int numeroHab,int camas ) {
habitacion( numeroHab );
camas( camas );
}
public synchornized int habitacion() {
return( numHabitacion );
}
public synchronized void habitacion( int numeroHab ) {
numHabitacion = numeroHab;
}
public synchronized int camas() {
return( camas );
}
public syncronized void camas( int camas ) {
numCamas = camas;
}
}

El código anterior sería el corazón de la aplicación. Vamos pues a construir nuestro Hotel creando Habitaciones y asignándole a cada una de ellas su llave electrónica; tal como muestra el código siguiente, Hotel1.java :

public class Hotel1 {
public static void main( String args[] ) {
Habitacion llaveHab1;                      // paso 1
Habitacion llaveHab2;
llaveHab1 = new Habitacion( 222 );         // pasos 2, 3, 4 y 5
llaveHab2 = new Habitacion( 1144,3 );
//      ^^^^^^^^^   ^^^^^^^^^^^^^^  ^^^^^^
//          A            B y D        C
}
}

Para explicar el proceso, dividimos las acciones en los cinco pasos necesarios para poder entrar en nuestra habitación. Aunque no se incluye, podemos también considerar el caso de que necesitemos un cerrajero, para que cuando perdamos la llave, nos abra la puerta; y que en nuestro caso sería el garbage collector , que recicla la habitación una vez que se hayan perdido todas las llaves.

El primer paso es la creación de la llave, es decir, definir la variable referencia, por defecto nula .

El resto de los pasos se agrupan en una sola sentencia Java. La parte B en el código anterior indica al gerente del Hotel que ya dispone de una nueva habitación. La parte C llama al decorador de interiores para que " vista " la habitación según un patrón determinado, para que no desentonen unas habitaciones con otras y no se pierdan las señas de identidad del hotel. El código electrónico que nos permitirá acceder a la habitación se genera en la parte D, una vez conocido el interior de la habitación y se programa en la llave en la parte A.

Si dejamos el ejemplo real a un lado y nos vamos a lo que ocurre en la ejecución del código, vemos que el operador new busca espacio para una instancia de un objeto de una clase determinada e inicializa la memoria a los valores adecuados. Luego invoca al método constructor de la clase, proporcionándole los argumentos adecuados. El operador new devuelve una referencia a sí mismo, que es inmediatamente asignada a la variable referencia.

Podemos tener múltiples llaves para una misma habitación:

. . . Habitacion llaveHab3,llaveHab4; llaveHab3 = llaveHab1; llaveHab4 = llavehab2;

De este modo conseguimos copias de las llaves. Las habitaciones en sí mismas no se han tocado en este proceso. Así que, ya tenemos dos llaves para la habitación 222 y otras dos para la habitación 1144.

Una llave puede ser programada para que funcione solamente con una habitación en cualquier momento, pero podemos cambiar su código electrónico para que funcione con alguna otra habitación; por ejemplo, para cambiar una habitación anteriormente utilizada por un empedernido fumador por otra limpia de olores y con vistas al mar. Cambiemos pues la llave duplicada de la habitación del fumador (la 222) por la habitación con olor a sal marina, 1144:

. . . llaveHab3 = llaveHab2;

Ahora tenemos una llave para la habitación 222 y tres para la habitación 1144. Mantendremos una llave para cada habitación en la conserjería, para poder utilizarla como llave maestra, en el caso de que alguien pierda su llave propia.

Alguien con la llave de una habitación puede hacer cambios en ella, y los compañeros que tengan llave de esa misma habitación, no tendrán conocimiento de esos cambios hasta que vuelvan a entrar en la habitación. Por ejemplo, vamos a quitar una de las camas de la habitación, entrando en ella con la llave maestra:

. . . llaveHab2.camas( 2 );

Ahora cuando los inquilinos entren en la habitación podrán comprobar el cambio realizado:

. . . llaveHab4.printData();

Capítulo anterior:
Paquetes

Capítulo siguiente:
Referencias y Listas



 

 
Portada
Capítulos del Manual de Java
Introducción a Java
Origen de Java
Características de Java
Instalación del JSDK
Conceptos Basicos
Programación
Control de Flujo
Clases
Variables y Métodos de Instancia
Alcance de Objetos y Reciclado de Memoria
Herencia
Control de Acceso
Variables y Métodos Estáticos
this y super
Clases Abstractas
Interfaces
Métodos Nativos
Paquetes
Referencias
Referencias y Arrays
Referencias y Listas
Una mínima aplicación
Compilación y Ejecución de Hola Mundo
Un Applet Básico
La Clase Math
La Clase Character
La Clase Float
La Clase Double
La Clase Integer
La Clase Long
La Clase Boolean
La Clase String
La Clase StringBuffer
Uso de Conversiones
Manejo de Excepciones
Generar Excepciones
Excepciones Predefinidas
Crear Excepciones
Capturar Excepciones
Propagación de Excepciones
Entrada/Salida Estándar
Ficheros
Streams de Entrada
Streams de Salida
Ficheros de Acceso Aleatorio
Practicar en línea
Lista de prácticas en línea
FAQ
Preguntas frecuentes
Códigos Java
Lista de Códigos Java
Foros
Foros Java
Otros Manuales
Manuales de otros lenguajes
 
   
 
 
Alojamiento web en Hostalia