Que significa this en java
Java

Que significa this en java – (Todo lo que debes saber)

Compártelo

Que significa this en java

Una de las preguntas que mas me hacen  es sobre que significa this en Java. En este apartado vamos a explicar que es y para que se utiliza esta variable, asi que no te despegues de tu ordenador o de tu móvil. Empezamos.

Puede haber mucho uso sobre la palabra this en java, esta es una variable de referencia que se refiere al objeto actual.

También te puede interesar:

Uso de this en Java

A continuación te muestro 6 usos sobre la palabra this.

this se puede usar para referir la variable de instancia de la clase actual.
this  se puede usar para invocar el método de clase actual (implícitamente)
this () se puede usar para invocar el constructor de clase actual.
this se puede pasar como un argumento en la llamada al método.
this se puede pasar como argumento en la llamada de constructor.
this se puede usar para devolver la instancia de clase actual del método.

Sugerencia: si eres principiante en Java, busca solo tres usos de esta palabra clave.

1) this: para referir a la variable de instancia de la clase actual

La palabra clave this se puede usar para referirse a  la variable de instancia de la clase actual. Si hay ambigüedad entre las variables de instancia y los parámetros, esta palabra clave resuelve el problema de la ambigüedad.

Comprender el problema sin esta palabra clave

Comprendamos el problema si no usamos esta palabra clave con el ejemplo que se muestra a continuación:

class Student{
int rollno;
String name;
float fee;
Student(int rollno,String name,float fee){
rollno=rollno;
name=name;
fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}
class TestThis1{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

Salida:

0 null 0.0
0 null 0.0

En el ejemplo anterior, los parámetros (argumentos formales) y las variables de instancia son iguales. Entonces, estamos usando esta palabra clave para distinguir la variable local y la variable de instancia.

Solución del problema anterior por esta palabra clave

 

class Student{
int rollno;
String name;
float fee;
Student(int rollno,String name,float fee){
this.rollno=rollno;
this.name=name;
this.fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}

class TestThis2{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

Salida:

111 ankit 5000
112 sumit 6000

Si las variables locales (argumentos formales) y las variables de instancia son diferentes, no es necesario utilizar esta palabra clave como en el siguiente programa:

Programa donde esta palabra clave no es requerida

 

class Student{
int rollno;
String name;
float fee;
Student(int r,String n,float f){
rollno=r;
name=n;
fee=f;
}
void display(){System.out.println(rollno+" "+name+" "+fee);}
}

class TestThis3{
public static void main(String args[]){
Student s1=new Student(111,"ankit",5000f);
Student s2=new Student(112,"sumit",6000f);
s1.display();
s2.display();
}}

Salida:

111 ankit 5000
112 sumit 6000

2) this: para invocar el método de clase actual

Puede invocar el método de la clase actual usando la palabra clave this. Si no utiliza la palabra clave this, el compilador agrega automáticamente esta palabra clave al invocar el método. Veamos el ejemplo

 

class A{
void m(){System.out.println("hello m");}
void n(){
System.out.println("hello n");
//m();//same as this.m()
this.m();
}
}
class TestThis4{
public static void main(String args[]){
A a=new A();
a.n();
}}

Salida:

 

hello n
hello m

3) this (): para invocar el constructor de la clase actual

La llamada al constructor this () se puede usar para invocar el constructor de la clase actual. Se usa para reutilizar el constructor. En otras palabras, se usa para el encadenamiento de constructores.

Llamar al constructor predeterminado del constructor parametrizado:

 

class A{
A(){System.out.println("hello a");}
A(int x){
this();
System.out.println(x);
}
}
class TestThis5{
public static void main(String args[]){
A a=new A(10);
}}

Salida:

hello a
10

Llamando al constructor parametrizado desde el constructor predeterminado:

class A{
A(){
this(5);
System.out.println("hello a");
}
A(int x){
System.out.println(x);
}
}
class TestThis6{
public static void main(String args[]){
A a=new A();
}}

Salida:

 

 

5
hello a
[/cc]

Uso real de this () llamada de constructor

La llamada al constructor this () debe usarse para reutilizar el constructor desde el constructor. Mantiene la cadena entre los constructores, es decir, se utiliza para el encadenamiento de constructores. Veamos el ejemplo que se muestra a continuación que muestra el uso real de esta palabra clave.

 

class Student{
int rollno;
String name,course;
float fee;
Student(int rollno,String name,String course){
this.rollno=rollno;
this.name=name;
this.course=course;
}
Student(int rollno,String name,String course,float fee){
this(rollno,name,course);//reusing constructor
this.fee=fee;
}
void display(){System.out.println(rollno+" "+name+" "+course+" "+fee);}
}
class TestThis7{
public static void main(String args[]){
Student s1=new Student(111,"ankit","java");
Student s2=new Student(112,"sumit","java",6000f);
s1.display();
s2.display();
}}

Salida:

111 ankit java null
112 sumit java 6000
class Student{
int rollno;
String name,course;
float fee;
Student(int rollno,String name,String course){
this.rollno=rollno;
this.name=name;
this.course=course;
}
Student(int rollno,String name,String course,float fee){
this.fee=fee;
this(rollno,name,course);//C.T.Error
}
void display(){System.out.println(rollno+" "+name+" "+course+" "+fee);}
}
class TestThis8{
public static void main(String args[]){
Student s1=new Student(111,"ankit","java");
Student s2=new Student(112,"sumit","java",6000f);
s1.display();
s2.display();
}}

4) this: pasar como argumento en el método

La palabra clave this también se puede pasar como un argumento en el método. Se usa principalmente en el manejo de eventos. Veamos el ejemplo:

class S2{
void m(S2 obj){
System.out.println("method is invoked");
}
void p(){
m(this);
}
public static void main(String args[]){
S2 s1 = new S2();
s1.p();
}
}

Salida:

method is invoked

Aplicación de this que se puede pasar como argumento:

En el manejo de eventos (o) en una situación donde tenemos que proporcionar la referencia de una clase a otra. Se usa para reutilizar un objeto en muchos métodos.

5) this: pasar como argumento en la llamada de constructor

Podemos pasar la palabra clave this en el constructor también. Es útil si tenemos que usar un objeto en múltiples clases. Veamos el ejemplo:

class B{
A4 obj;
B(A4 obj){
this.obj=obj;
}
void display(){
System.out.println(obj.data);//using data member of A4 class
}
}

class A4{
int data=10;
A4(){
B b=new B(this);
b.display();
}
public static void main(String args[]){
A4 a=new A4();
}
}

Salida:

Output:10

6) this se puede usar para devolver la instancia de la clase actual

Podemos devolver esta palabra clave como una declaración del método. En tal caso, el tipo de devolución del método debe ser del tipo de clase (no primitivo). Veamos el ejemplo:

Sintaxis de esto que se puede devolver como una declaración

 

return_type method_name(){
return this;
}

Ejemplo de this que devuelve como una declaración del método

class A{
A getA(){
return this;
}
void msg(){System.out.println("Hello java");}
}
class Test1{
public static void main(String args[]){
new A().getA().msg();
}
}

Salida:

Hello java

Probar this

Probemos que esta palabra clave se refiere a la variable de instancia de la clase actual. En este programa, estamos imprimiendo la variable de referencia y esto, el resultado de ambas variables es el mismo.

 

class A5{
void m(){
System.out.println(this);//prints same reference ID
}
public static void main(String args[]){
A5 obj=new A5();
System.out.println(obj);//prints the reference ID
obj.m();
}
}

Salida:

A5@22b3ea59
A5@22b3ea59

Bueno esto ha sido todo por este articulo, espero que te haya gustado la clase sobre que significa this en java y todos sus usos, esperamos verte por los comentarios. Gracias.

Compártelo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *