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

this, como se usa, que hace?

Estas en el tema de this, como se usa, que hace? en el foro de Java en Foros del Web. hola, estoy leyendo un buen libro de java, pero no termino de captar lo que quiere enseñar con este codigo: Código: public class Leaf{ int ...
  #1 (permalink)  
Antiguo 12/07/2010, 15:17
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
this, como se usa, que hace?

hola, estoy leyendo un buen libro de java, pero no termino de captar lo que quiere enseñar con este codigo:

Código:
public  class Leaf{
	int i=0;
	Leaf increment(){
		i++;
		return this;
	}
	void print(){
		System.out.println("i = "+i);
	}
	public static void main(String[]args){
		Leaf x=new Leaf();
		x.increment().increment().increment().print();
	}	
}
Cual es el flujo de trabajo?, lo que hace this es ir guardando la suma de cada vez que se llama a Leaf increment()?

y este otro codigo.
Código:
    class Person{
   
       public void eat(Apple apple){
         Apple peeled=apple.getPeeled();
         System.out.println("Yummy");
      }
   }

    class Peeler{
       static Apple peel(Apple apple){
         return apple;
      }
   }

    class Apple{
       Apple getPeeled(){
         return Peeler.peel(this);}
   }
    public class PassingThis{
       public static void main(String[] args){
         new Person().eat(new Apple());
      }
   }
A este le entiendo menos.

El tema es la Palabra clave this.

De antemano agradesco su ayuda.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 12/07/2010, 16:35
 
Fecha de Ingreso: julio-2010
Mensajes: 19
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: this, como se usa, que hace?

En el primer codigo la palabra this se refiere al clase Leaf como tal.

Un ejemplo es:

Código:
Leaf leaf = new Leaf();
Leaf leaf2 = leaf.increment();
Estas palabras son solo apuntadores a memoria, entonces tendrias que leaf2 esta apuntando al mismo espacio en memoria que leaf. Con esto te digo que el return this; esta devolviendo leaf.

Si fuera leaf2.increment(); entonces estaria devolviendo leaf2.

En el segundo codigo en la linea return Peeler.peel(this);... this hace referencia al objeto apple. Si prestas atencion la funcion es static Apple peel(Apple apple){ la cual espera como parametro Apple.

Visita este link para mas informacion:
[URL="http://www.forosdelweb.com/f45/duda-principiante-funcion-java-532158/"]http://www.forosdelweb.com/f45/duda-principiante-funcion-java-532158/[/URL]
  #3 (permalink)  
Antiguo 12/07/2010, 23:29
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: this, como se usa, que hace?

Gracias por tu respuesta, pero de verdad no capto la idea, entonces.
En el primer codigo se que se apunta a la clase leaf, y es por eso que me pierdo en esta sentencia:
x.increment().increment().increment().print();

es como llamar por medio de increment 4 veces, si por cada vez hay un retorno que suma la variable tras cada paso. Digo esto porque puse un print para ver :), ahora si quito return sale un error, pero el que me sorprende es print(), es acaso alguna palabra clave?.

En el segundo ejercicio, pues no entiendo esta forma de refenciar.
new Person().eat(new Apple()); y el recorrido que hace dentro de la clase.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #4 (permalink)  
Antiguo 13/07/2010, 01:49
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

Cita:
Iniciado por briant14 Ver Mensaje
En el primer codigo la palabra this se refiere al clase Leaf como tal.

Un ejemplo es:

Código:
Leaf leaf = new Leaf();
Leaf leaf2 = leaf.increment();
Estas palabras son solo apuntadores a memoria, entonces tendrias que leaf2 esta apuntando al mismo espacio en memoria que leaf. Con esto te digo que el return this; esta devolviendo leaf.
__________________
--
NO. Tu problema no es urgente.

CCFVLS

Última edición por elAntonie; 13/07/2010 a las 01:59
  #5 (permalink)  
Antiguo 13/07/2010, 01:55
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

this es el objeto. NO hace referencia a la clase Leaf si no al objeto leaf. Son 2 cosas muy diferentes.

El metodo increment, esta incrementando la variable i, y devuelve el objeto leaf. El propio objeto.

Así en el main estas incrementandol i 3 veces (donde estan las 4 veces que dices??), y lo estas imprimiendo por pantalla.
Por otro lado print no es una palabra reservada en java. y si quitas el return de incremente te da un error porque la declaracion del metodo es:

Código:
Leaf increment(){
para que no te de error tendria que ser de tipo void.

Respecto al segundo ejercicio, hazlo en 2 lineas a ver si lo ves mas claro
Código:
Person p = new Person();
p.eat(new Apple()); 
p = null;
Que es lo mismo.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS

Última edición por elAntonie; 13/07/2010 a las 02:01
  #6 (permalink)  
Antiguo 13/07/2010, 06:34
 
Fecha de Ingreso: marzo-2008
Mensajes: 99
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: this, como se usa, que hace?

Cita:
En el primer codigo la palabra this se refiere al clase Leaf como tal.

Un ejemplo es:

Código:

Leaf leaf = new Leaf();
Leaf leaf2 = leaf.increment();

Estas palabras son solo apuntadores a memoria, entonces tendrias que leaf2 esta apuntando al mismo espacio en memoria que leaf. Con esto te digo que el return this; esta devolviendo leaf.

Si fuera leaf2.increment(); entonces estaria devolviendo leaf2.

En el segundo codigo en la linea return Peeler.peel(this);... this hace referencia al objeto apple. Si prestas atencion la funcion es static Apple peel(Apple apple){ la cual espera como parametro Apple.

Visita este link para mas informacion:
http://www.forosdelweb.com/f45/duda-...n-java-532158/

No confundas a los usuarios briant14.


Como bien te explica elAntoni, la palabra clave this hace referencia a la clase misma. Este comando te permite acceder a los metodos y variables de la misma clase. Java posee varias palabras reservadas, como for, if, struct, public, private,etc.
Lo que te debe quedar claro es que la palabra this te permite acceder a los miembors y metodos de la propia clase, asi como hacer referencia a ella misma.
En cuanto al codigo proba lo que dice elAntoni.
  #7 (permalink)  
Antiguo 13/07/2010, 08:18
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: this, como se usa, que hace?

Hola, gracias por sus respuestas.
El primer codigo ya lo entendí, y veo la usabilidad de this en el return.

Pero en el segundo codigo aun no lo comprendo, comienza llamando a los metodos uno dentro de otro y al final me pierdo porque hay metodos que piden dos valores y solo se entrega uno, ayudeme a aclararlo.

tambien hize algo como esto:
Código:
// desarrollo del ejercicio 8
class futbol{
	void Patear(){
		System.out.println("Accion o efecto de golpear el balon con el pie");				
	}
	
	void Patear(int a){
		System.out.println("Solo "+a+" jugadores por equipo");
	}
	
	void Gol(){		
		this.Patear();
		Patear(11);
	}
	
	public static void main(String [] args){
	System.out.println("Esto es un ejemplo");	
	futbol p= new futbol();
	p.Gol();
	}
}
en donde estoy usando this me llama al primer metodo mientras en el Patear(11) llama al otro metodo.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 13/07/2010, 08:48
 
Fecha de Ingreso: marzo-2008
Mensajes: 99
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: this, como se usa, que hace?

nN el otro te recomiendo que separes las clases.Un archivo java por cada clase. Asi va a ser mas legible para vos.


Por otro lado te voy a resumir la explicacion de como esta funcionando el this. Aparte de permitirte acceder a los atributos y metodos, tambien te permite definir la clase padre/owner. Es decir quien esta llamando a esa clase.

Código:
class Peeler{
       static Apple peel(Apple apple){
         return apple;
      }
   }
Código:
 class Apple{
       Apple getPeeled(){
         return Peeler.peel(this);
       }
   }
La clase Peeler define al metodo peel. Este metodo recibe como argumento una instanciacion de la clase Apple. Cuando en la clase apple llamas a peel, con el argumento this le estas diciendo que esa es la clase padre/owner/o quien la invoca.

Esa es otra funcionalidad que posee el this. La de marcar a la clase como la responsable de la invocacion de la otra clase.

Esta es una explicacion a lo general. Fijate en la pagina de SUN al respecto.
  #9 (permalink)  
Antiguo 13/07/2010, 08:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 99
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: this, como se usa, que hace?

Otro consejo. Si tenes posibilidad de conseguir libros de Java de SUN hacelo. Yo me hice un curso y realmente son muy practicos los tipos.
  #10 (permalink)  
Antiguo 14/07/2010, 00:54
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

Cita:
Iniciado por lordphoenixs Ver Mensaje

No confundas a los usuarios briant14.


Como bien te explica elAntoni, la palabra clave this hace referencia a la clase misma. Este comando te permite acceder a los metodos y variables de la misma clase. Java posee varias palabras reservadas, como for, if, struct, public, private,etc.
Lo que te debe quedar claro es que la palabra this te permite acceder a los miembors y metodos de la propia clase, asi como hacer referencia a ella misma.
En cuanto al codigo proba lo que dice elAntoni.
A la clase noooooooooooooooo
Al objeto.

Hay una clase Leaf, con unos metodos y unos atributos definidos. De esa clase Leaf, se crea un objeto leaf. Que tiene identidad propia.

Clase y Objeto, por Dios.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #11 (permalink)  
Antiguo 14/07/2010, 00:57
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

Cita:
Iniciado por Copia Ver Mensaje
Código:
// desarrollo del ejercicio 8
class futbol{
	void Gol(){		
		this.Patear();
		Patear(11);
	}
	
	public static void main(String [] args){
	System.out.println("Esto es un ejemplo");	
	futbol p= new futbol();
	p.Gol();
	}
}
en donde estoy usando this me llama al primer metodo mientras en el Patear(11) llama al otro metodo.
El Patear(11) llama al metodo Patear(int) de la clase futbol. Quizas te haces un lio porque en el metodo Gol hace una llamada con this.Patear() y luego un Patear(11) solo, sin this.

A ver si con un ejemplo, lo ves mas claro. Es lo mismo que esto

Código:
this.Patear();
this.Patear(11);
Este ejemplo, lo que te esta mostrando es que el this se puede omitir, porque java 'sabe' que te estás refiriendo al propio objeto.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #12 (permalink)  
Antiguo 14/07/2010, 08:42
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: this, como se usa, que hace?

muchas gracias amigo, ya creo comprenderlo.
Me pongo a practicar, espero que con esto ya me salgan las cosas :)
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #13 (permalink)  
Antiguo 14/07/2010, 09:43
 
Fecha de Ingreso: febrero-2010
Mensajes: 128
Antigüedad: 14 años, 2 meses
Puntos: 3
Respuesta: this, como se usa, que hace?

this es un puntero al objeto en curso, se puede utilizar o se puede ovbiar:

Se usa frecuentemente para diferenciar atributos de la propia clase con los provenientes de los parámetros del método.

Código:
public void setIdentificador(int identificador)
{this.identificador=identificador;}
se utiliza también a la hora de programar para invocar a métodos de la propia clase y ver sus especificaciones.
  #14 (permalink)  
Antiguo 14/07/2010, 11:03
 
Fecha de Ingreso: marzo-2008
Mensajes: 99
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: this, como se usa, que hace?

bueno , me confundi elAntoni, clase, objeto, estoy con un proyecot que de p.. puedo ilvanar las ideas
  #15 (permalink)  
Antiguo 14/07/2010, 15:57
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 14 años, 5 meses
Puntos: 4
Respuesta: this, como se usa, que hace?

this devuelve la referencia al objeto para el cual ha sido invocado el metodo.
En el primer codigo que doy de LEAF, lo que se hace es invocar al metodo Leaf. Es como lo estoy entendiendo.

En el siguiente codigo lo que quiero entender es como se hace el llamado a Peeler
Código:
class Person{
   
 public void eat(Apple apple){
         Apple peeled=apple.getPeeled();
         System.out.println("Yummy");
      }
 }

class Peeler{
       static Apple peel(Apple apple){
         return apple;
      }
   }

    class Apple{
       Apple getPeeled(){
         return Peeler.peel(this);}
   }
    public class PassingThis{
       public static void main(String[] args){
         new Person().eat(new Apple());
      }
   }
Peeler define static Apple peel(Apple apple), tengo entendido que debe ser el tipo de la variable que se va a usar como (int apple) pero en este caso no es asi.

Y tanto la clase Person y Peel usan metodos deonde esperan a Apple apple, y supongo que se le pasan los datos desde new Person().eat(new Apple());

Ayudenme, quiza la forma que me enseñaron en un comentario anterior ayuda a explicar, no me saca del todo de las dudas.
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #16 (permalink)  
Antiguo 15/07/2010, 01:50
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

Cita:
Iniciado por Copia Ver Mensaje
this devuelve la referencia al objeto para el cual ha sido invocado el metodo.
En el primer codigo que doy de LEAF, lo que se hace es invocar al metodo Leaf. Es como lo estoy entendiendo.

En el siguiente codigo lo que quiero entender es como se hace el llamado a Peeler
Código:
class Person{
   
 public void eat(Apple apple){
         Apple peeled=apple.getPeeled();
         System.out.println("Yummy");
      }
 }

class Peeler{
       static Apple peel(Apple apple){
         return apple;
      }
   }

    class Apple{
       Apple getPeeled(){
         return Peeler.peel(this);}
   }
    public class PassingThis{
       public static void main(String[] args){
         new Person().eat(new Apple());
      }
   }
Peeler define static Apple peel(Apple apple), tengo entendido que debe ser el tipo de la variable que se va a usar como (int apple) pero en este caso no es asi.

Y tanto la clase Person y Peel usan metodos deonde esperan a Apple apple, y supongo que se le pasan los datos desde new Person().eat(new Apple());

Ayudenme, quiza la forma que me enseñaron en un comentario anterior ayuda a explicar, no me saca del todo de las dudas.
La palabra reservada static hace referencia a un metodo o atributo de clase.

En tu caso es un metodo de clase (el metodo peel) es aquel que es llamado por todos los objetos de esa clase, en vez de definirse cada uno el suyo. Todo lo que se haga en ese metodo tiene que referirse a atributos tambien static.

Por eso la llamada es :
Código:
Peeler.peel(this);
en vez de

Código:
Peeler juan = new Peeler();
juan.peel(this);
La verdad es que el ejemplo que te han puesto es muy malo.
El usu principal que puede tener esto, puede ser el compartir variables entre objetos

Hay varios ejemplos, bastante mas clarificadores en google.

http://aprendiendojava.blogspot.com/...or-static.html

Saludos
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #17 (permalink)  
Antiguo 15/07/2010, 02:06
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: this, como se usa, que hace?

Cita:
Iniciado por lordphoenixs Ver Mensaje
bueno , me confundi elAntoni, clase, objeto, estoy con un proyecot que de p.. puedo ilvanar las ideas
Jajajaja. No te corregiria si la duda de Copia no fuera precisamente sobre eso. Se de sobra que sabes la diferencia.

Esa tecla de Mays....

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS

Etiquetas: Ninguno
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 20:01.