Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Java keywords

En este artículo, aprenderá acerca de esta palabra clave en Java; cómo y dónde se usan con la ayuda de ejemplos.

esta palabra clave

En Java, se thisrefiere al objeto actual dentro de métodos o constructores. Tomemos un ejemplo para demostrarlo.
  1. class MyClass {
  2. int instVar;
  3. MyClass(int instVar){
  4. this.instVar = instVar;
  5. System.out.println("this reference = " + this);
  6. }
  7. public static void main(String[] args) {
  8. MyClass obj = new MyClass(8);
  9. System.out.println("object reference = " + obj);
  10. }
  11. }
Cuando ejecutas el programa, la salida será:
esta referencia = com.ThisAndThat.MyClass@74a14482
referencia de objeto = com.ThisAndThat.MyClass@74a14482
Observe que el id del objeto de obj y thises el mismo. Es decir, thisno es más que la referencia al objeto actual.
Hay 3 situaciones en las que esta palabra clave se usa comúnmente.

1. Usando esto para desambigar referencias variables

En Java, no está permitido declarar dos o más variables que tengan el mismo nombre dentro de un ámbito (ámbito de clase o ámbito de método). Sin embargo, las variables y parámetros de instancia pueden tener el mismo nombre. Me gusta esto:
clase MyClass {
    int instVar; // variable de instancia instVar

    MyClass (int instVar) {// parámetro instVar
        instVar = instVar;
    }
}
En el programa anterior, el compilador de Java está confundido debido a la ambigüedad del nombre. Por lo tanto, para abordar este problema, thisse utiliza la palabra clave.
Primero, veamos un ejemplo sin usar la thispalabra clave:
  1. class MyClass {
  2. int instVar;
  3. MyClass(int instVar){
  4. instVar = instVar;
  5. }
  6. public static void main(String[] args) {
  7. MyClass mc = new MyClass(8);
  8. System.out.println("mc.instVar = " + mc.instVar);
  9. }
  10. }
Cuando ejecutas el programa, la salida será:
mc.instVar = 0
Es posible que haya esperado 8 como salida, pero, en cambio, obtiene 0. Esto se debe a que el compilador de Java se confunde debido a la ambigüedad en los nombres entre la variable de instancia y el parámetro constructor.
Ahora, reescribamos el código anterior y usemos la  thispalabra clave para resolver este problema.
  1. class MyClass{
  2. int instVar;
  3. MyClass(int instVar){
  4. this.instVar = instVar;
  5. }
  6. public static void main(String[] args) {
  7. MyClass obj = new MyClass(8);
  8. System.out.println("obj.instVar = " + obj.instVar);
  9. }
  10. }
Cuando ejecutas el programa, la salida será:
  1. mc.instVar = 8
Ahora, obtendrá el resultado esperado. Es porque cuando está creando un objeto, el compilador de Java sabe qué objeto ha invocado al constructor.
Cuando el compilador de Java invoca al constructor, thisdentro del constructor se reemplaza por el objeto que llamó al constructor.

Nota: Si pasa un parámetro que tiene un nombre diferente al de las variables de instancia, el compilador agrega automáticamente esta palabra clave.
Este código
clase MyClass {
    int instVar;

    MyClass (int i) {
        instVar = i;
    }
}
es equivalente a:
clase MyClass {
    int instVar;

    MyClass (int i) {
        this.instVar = i;
    }
}

Otro uso común de la thispalabra clave es en los métodos setters y getters de una clase. Por ejemplo:
  1. class POJO {
  2. String name;
  3. void setName( String name ) {
  4. this.name = name;
  5. }
  6. String getName(){
  7. return this.name;
  8. }
  9. public static void main( String[] args ) {
  10. POJO pojo = new POJO();
  11. pojo.setName("Toshiba");
  12. System.out.println("pojo.name: "+pojo.getName());
  13. }
  14. }
Cuando ejecutas el programa, la salida será:
pojo.name: Toshiba

2. Usando esto en la sobrecarga del constructor

Mientras trabaja con la sobrecarga del constructor , puede resultarle útil invocar un constructor de otro constructor. Pero, los constructores no pueden ser llamados explícitamente. Por lo tanto, para lograr esto, puede usar otra forma de thispalabra clave this().
El pseudocódigo se muestra aquí:
esto (arg-list)

Así es como puedes llamar a un constructor desde otro constructor usando this.
  1. class Complex {
  2. private int a, b;
  3. // parameterize constructor
  4. private Complex( int i, int j ){
  5. this.a = i;
  6. this.b = j;
  7. }
  8. private Complex(int i){
  9. this(i, i); // invokes Complex(int i, int j);
  10. }
  11. private Complex(){
  12. this(0); // invokes Complex(int i);
  13. }
  14. @Override
  15. public String toString(){
  16. return this.a + " + " + this.b + "i";
  17. }
  18. public static void main( String[] args ) {
  19. Complex c1 = new Complex(2, 3);
  20. Complex c2 = new Complex(3);
  21. Complex c3 = new Complex();
  22. System.out.println(c1);
  23. System.out.println(c2);
  24. System.out.println(c3);
  25. }
  26. }
Cuando ejecutas el programa, la salida será:
2 + 3i
3 + 3i
0 + 0i
En el programa anterior, no importa qué constructor se llame durante la instanciación del objeto, el constructor parametrizado se llamará eventualmente.

Debes tener cuidado al usar this()Los constructores que llaman se this()ejecutan lentamente porque llamar a otro constructor sobrecargado agrega sobrecarga. Si su clase se usa para crear solo un puñado de objetos, entonces usar this()es fructífero. Otra gran ventaja de usar this()es reducir la cantidad de código duplicado.
Por cierto, invocar un constructor de otro constructor se llama invocación explícita del constructor.

3. Pasando esto como un argumento

Si necesita pasar el objeto actual como argumento a un método, puede usarlo this.
  1. class ThisExample {
  2. int x;
  3. int y;
  4. ThisExample(int x, int y) {
  5. this.x = x;
  6. this.y = y;
  7. System.out.println("Before passing this to addTwo() method:");
  8. System.out.println("x = " + this.x + ", y = " + this.y);
  9. addTwo(this);
  10. System.out.println("After passing this to addTwo() method:");
  11. System.out.println("x = " + this.x + ", y = " + this.y);
  12. }
  13. void addTwo(ThisExample o){
  14. o.x += 2;
  15. o.y += 2;
  16. }
  17. }
  18. class Demo {
  19. public static void main( String[] args ) {
  20. ThisExample obj = new ThisExample(1, -2);
  21. }
  22. }
Cuando ejecutas el programa, la salida será:
Antes de pasar esto al método addTwo ():
x = 1, y = -2
Después de pasar esto al método addTwo ():
x = 3, y = 0
Aquí, el addTwo()método se llama con thisun argumento desde el interior del constructor.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas