Foros del Web » Programación para mayores de 30 ;) » Java »

A que apunta el This?

Estas en el tema de A que apunta el This? en el foro de Java en Foros del Web. Buenas, he intentado entender de todos los medios posibles que es lo q hace este This, porq se encuentra pelado, entiendo el clasico ejemplo This.variable ...
  #1 (permalink)  
Antiguo 06/04/2012, 14:14
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 10 meses
Puntos: 2
A que apunta el This?

Buenas, he intentado entender de todos los medios posibles que es lo q hace este This, porq se encuentra pelado, entiendo el clasico ejemplo This.variable porq hace referecia a la variable de la clase, pero si me sale un "This" pelado, no se que es lo q significa.

Este es el ejemplo

Código PHP:
public class cola {
    private 
int dato;
    private 
cola sig;
    
cola(int d){
        
dato d;
        
sig null;
    }
    public 
cola poner(int d){
        
cola q = new cola(d);
        
q.sig this;
        return 
q;
    }
    public static 
void main(String a[ ]){
        
cola q = new cola(10);
        
q.poner(12);
        
q.poner(14);
    }

Cual es la funcion de ese This q no apunta a nada? Si no existieran los THIS, que debería decir entonces?
  #2 (permalink)  
Antiguo 06/04/2012, 14:36
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: A que apunta el This?

El operador this apunta a la instancia de la clase en la que se está ejecutando, es decir, al objeto concreto que se maneje en cada momento.

Voy a hacer una corrección a tu código en función de los convenios de notación. Por ejemplo un uso de this es para diferenciar una variable propia de la clase de una variable que se envía como parámetro, como por ejemplo si hicieses:

public class Cola {
private int dato;
private cola sig;
public Cola(int dato){
this.dato = dato;
sig = null; //o this.sig = null; - sería indiferente
}
}

Cuando creas un objeto de tipo Cola a partir de una variable dato, a this (el objeto creado) se le asigna como dato esa variable dato que le pasas como parámetro.

En tu main lo podrías llamar:

int miDatoInicial = 0;
Cola miCola = new Cola(miDatoInicial);

Y la aplicación ejecutaría el código anterior que crea el objeto de tipo Cola con ese dato inicial.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 06/04/2012, 14:54
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: A que apunta el This?

Gracias, pero puse dato = d; apropósito para q solo me explicaran el q.sig = this; Aver... lo estube re-re-re-remeditado, intentaré explicarlo de la forma que lo entiendo, porfavor, dime si estoy bien o si me equivoco en lo que concluí.



Por cada vez que paso por cola q = new cola(d); (del método poner) lo que hago es crear un nuevo nodo (por así decir), pero debido a q son nuevos nodos estos están sueltos.

Para unirlos paso a la siguiente linea q.sig = this; donde q.sig es el siguiente del nuevo nodo creado y this es el resto de la cola creada (osea... ¿¿ this es el objeto q que llamé desde q.poner(12)?? )

Una vez leída esa linea, el objeto q recién creado ya no es solo el objeto que contenía el nodo, sino ahora es la copia del objeto q que fue llamado desde q.poner(12), osea... es toda la pila (eso es lo que yo entiendo).

return q; devuelve la pila completa (no el nodo) en que se asignará en la siguiente linea q = q.poner(12);



Diganme si estoy bien o no, quiero estar seguro de esto, porq lo he meditado por varios días y cansa esforzarse a entender que hace el This por mucho tiempo.

Ahh!! si, la duda q me queda, es que si this representa al q con que llamé desde q.poner(12);

Si me equivoco en un detalle diganmelo plz.

Última edición por Gaudy; 06/04/2012 a las 19:22
  #4 (permalink)  
Antiguo 09/04/2012, 08:29
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: A que apunta el This?

Te voy a dar el resultado de la ejecución de tu código del main linea a linea si todo fuese en condiciones ideales tal y como lo tienes ahora:

public static void main(String a[ ]){
cola q = new cola(10);
q = q.poner(12);
q = q.poner(14);
}


cola q = new cola(10); => Crea un objeto Cola con dato = 10 y sig = null;
q = q.poner(12); => creas un nuevo objeto cola cuyo sig es la cola anterior y el dato 12. Cuando haces return la referencia "q" apunta al nuevo objeto.
q = q.poner(14); => creas un nuevo objeto cola cuyo sig es la cola anterior y el dato 14. Cuando haces return la referencia "q" apunta al nuevo objeto.

Cuando acabas tienes un objeto cola creado cuyo dato vale 14 y su sig es una cola con dato 12 y cuyo sig es la cola inicial de dato 10.

Supongo que sería eso lo que querrías crear.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:07.