Historia de la pregunta:
En Java, al igual que en otros lenguajes orientados a objetos, se utiliza el mecanismo de punteros al objeto actual. En Java, se introduce la palabra clave this, que permite hacer referencia explícita al objeto actual.
Problema:
Sin utilizar this, pueden surgir situaciones ambiguas cuando una variable local (por ejemplo, un parámetro de constructor o método) oculta el campo de instancia. También puede ser necesario pasar el objeto actual a otro componente o llamar a sus métodos dentro de la misma clase.
Solución:
La palabra clave this:
Ejemplo:
public class Person { private String name; public Person(String name) { this.name = name; // Resolución del conflicto entre campos y parámetros } }
Características clave:
¿Se puede acceder a métodos y campos no estáticos sin this?
Sí. Dentro de los métodos de la clase no es necesario usar this: el compilador, por defecto, accede a los miembros no estáticos del objeto actual. El uso de this se vuelve obligatorio cuando hay ambigüedad (por ejemplo, los parámetros del constructor ocultan los campos).
¿Puede this ser utilizado en un método estático o bloque estático?
No. En el contexto estático, la variable this no existe, ya que los elementos estáticos no dependen de una instancia concreta.
¿Puede la llamada this(...) (constructor sobrecargado) no ser la primera línea del constructor?
No. La llamada a otro constructor mediante this debe ser la primera línea del constructor, de lo contrario, se producirá un error de compilación.
El desarrollador escribe un constructor sin usar this y los campos de instancia no se inicializan correctamente:
public class A { private int a; public A(int a) { a = a; } // ¡Error! }
Ventajas:
Desventajas:
El constructor usa explícitamente this para resolver la colisión de nombres e inicializar el campo:
public class A { private int a; public A(int a) { this.a = a; } }
Ventajas:
Desventajas: