You are on page 1of 4

Los punteros de java

Hay un par de ideas sobre java muy extendidas: java no tiene punteros y en java todo se pasa por referencia. La realidad, es que java se entiende mucho mejor si lo pensamos exactamente al revs. En java slo hay punteros (con excepcin de los tipos primitivos) y en java todo se pasa por valor (por copia). Por ejemplo, en C++ hacemos esto MiClase a; y ya est todo correcto. La variable a est perfectamente inicializada. Si en java hacemos eso, tenemos una variable a sin inicializar. Es necesario hacerle un new, exactamente igual que un puntero en C++ MiClase a = new MiClase(); // Esto en Java MiClase *a = new MiClase(); // Esto en C++ // o este otro tipo de inicializacin extraamente parecida ... MiClase a = null; // en java MiClase *a=NULL; // en C++ La nica diferencia es la notacin con el asterisco. Si pensamos que en java TODO son punteros, no es necesario poner el asterisco para distinguir lo que es puntero de lo que no lo es, por lo que smplemente lo han quitado. Ahora imaginemos un mtodo que recibe una clase y que le hacemos una llamada // en java... void medodo (MiClase a) { a = new MiClase(); } ... MiClase b = null; metodo (b); Bueno, pues cuando salimos del mtodo b sigue valiendo null, "apuntando a null". Eso quiere decir que a y b son variables disintas, es decir, se ha pasado la variable b por valor al mtodo. Cmo podemos crear una nueva instancia y devolverla?. En java no queda ms remedio que hacerlo en el return, es imposible hacerlo a travs de parmetros. Sin embargo, en C++ tenemos ms posibilidades. Podemos usar un puntero al puntero, es decir, hacer esto void metodo (MiClase **a) { *a = new MiClase(); } ...

MiClase *b=NULL; metodo (&b); o bien, incluso usar referencias de verdad // El & en la declaracin es lo que hace que realmente sea una referencia. void metodo (MiClase * &a) { a=new MiClase(); } ... MiClase *b=NULL; metodo (b); // Aqui b apunta al MiClase creado dentro del mtodo. Hacindolo as, el puntero b de fuera del mtodo y el puntero a del parmetro son exactamente la misma variable. Ojo, no quiero decir que sean dos punteros distintos que apunten al mismo lado, sino que son realmente el mismo puntero. Cuando hacemos que a apunte a otro sitio, b tambin apuntar al mismo sitio. Esto es lo que yo entiendo realmente por referencia. Vemos en este sentido que C++ nos da ms posiblidades que java.

:: Listas en JAVA ::
Descripcin: Las Listas son estructuras de datos dinmicas que poseen nodos, los cuales contienen informacin de algn dato y punteros que apuntan o hacen referencia a otro nodo de la lista. Existen varios tipos de listas que se pueden codificar en JAVA. A continuacin se muestran los links con ejemplos de algunas listas realizadas en este Blog:

Listas Simplemente Enlazadas Listas Doblemente Enlazadas Listas Circulares Para implementar estas listas, se defini una Clase Abstracta denominada Lista, la cual posee mtodos abstractos, que obligan a todas las subclases que la hereden a sobre-escribir dichos mtodos. Todas las listas presentadas contienen una clase que hereda (extends) de la superclase Lista. Los mtodos abstractos que contiene Lista son:

Insertar al inicio Insertar al final Extraer dato al inicio Extraer dato al final Imprimir Buscar dato Ms informacin sobre Clases, Mtodos Abstractos y Polimorfismo se encuentra en esta entrada del Blog: Explicacin

Para utilizar cualquiera de los proyectos de listas, ya sea simple, doble o circular, se debe incluir la clase abstractaLista en el mismo paquete en que se encuentren el resto de clases.

Clase Abstracta: Lista

En caso contrario, si no se desea utilizar la clase abstracta Lista, se debe modificar la definicin de las clases ListaSimple, ListaDoble o ListaCircular, para que no hereden de Lista, esto quiere decir que todas dichas clases NOdebern contener las palabras extends Lista en la firma de clase.

You might also like