2012-01-03 19 views
6

Estaba estudiando la anulación de métodos en Java cuando ai me encontré con la palabra clave this. Después de buscar mucho sobre esto en Internet y otras fuentes, llegué a la conclusión de que la palabra clave this se usa cuando el nombre de una variable de instancia es el mismo que el de la función de constructor . ¿Estoy en lo correcto o incorrecto?Uso de la palabra clave "this" en java

+4

No siempre. Puede haber varios casos. Por ejemplo, cuando quiere pasar su propia instancia a un método como parámetro, hace 'method (this)'. –

+1

@Junior Bill gates: Es solo un uso válido de la palabra clave "this". – paulsm4

Respuesta

12

this es un alias o un nombre para la instancia actual dentro de la instancia. Es útil para la eliminación de ambigüedades de las variables de instancia de los locales (incluidos los parámetros), pero se puede usar solo para referirse a variables y métodos de miembros, invocar otras sobrecargas de constructor o simplemente para referirse a la instancia . Algunos ejemplos de usos aplicables (no exhaustiva):

class Foo 
{ 
    private int bar; 

    public Foo() { 
      this(42); // invoke parameterized constructor 
    } 

    public Foo(int bar) { 
     this.bar = bar; // disambiguate 
    } 

    public void frob() { 
      this.baz(); // used "just because" 
    } 

    private void baz() { 
      System.out.println("whatever"); 
    } 

} 
+2

Vale la pena señalar: cuando se usa en un constructor, el 'this (...)' debe ser la primera instrucción. – nneonneo

+1

Calificadores tales como 'this' o el nombre de clase para llamadas estáticas hacen que su código sea mucho más legible y ahorre mucho tiempo. En un segundo el lector conoce el alcance de las variables o métodos o su fuente. Me niego a leer/ayudar con problemas de código si los calificadores apropiados no se usan. No tengo tiempo para seguir los métodos o adivinar en qué clase se encuentran, especialmente si los ide modernos, como eclipse, tienen funciones de autocompletar en operaciones de guardado. – djmj

1

Esto se refiere objeto actual. Si tiene una clase con variables int A y un método xyz, parte de la clase tiene int A, solo para diferenciar a qué 'A' hace referencia, lo usará. Este es solo un caso de ejemplo.

public class Test 
{ 
int a; 

public void testMethod(int a) 
{ 
this.a = a; 
//Here this.a is variable 'a' of this instance. parameter 'a' is parameter. 
} 
} 
-1

Me gustaría modificar su idioma. El esta palabra clave se usa cuando necesita usar la variable global de clase en los constructores.

public class demo{ 
    String name; 
    public void setName(String name){ 
     this.name = name; //This should be first statement of method. 
    } 
} 

este es una referencia al objeto actual - el objeto cuyo método o constructor está siendo llamado. Puede hacer referencia a cualquier miembro del objeto actual desde un método de instancia o un constructor utilizando este.

Una cosa más que debe tenerse en cuenta es que esta palabra clave podría ser la primera declaración de su método.

2

Tiene razón, pero este es solo un escenario de uso, no una definición. La palabra clave this se refiere al "objeto actual". Se usa principalmente para que un objeto pueda pasar a sí mismo como un parámetro a un método de otro objeto.

Así, por ejemplo, si hay un objeto llamado Person, y un objeto llamado PersonSaver, y se invoca Person.SaveYourself(), entonces Person sólo podría hacer lo siguiente: PersonSaver.Save(this);

Ahora, sucede que this también se puede utilizar para eliminar la ambigüedad entre los datos de instancia y los parámetros del constructor o de los métodos, si resultan ser idénticos.

11

this palabra clave puede utilizarse para (No se puede utilizar con métodos estáticos):

  1. Para obtener referencia de un objeto a través del cual se llama ese método dentro de él (método de instancia).
  2. Para evitar el campo sombreado por un método o parámetro de constructor.
  3. Para invocar constructor de la misma clase.
  4. En caso de método anulado, this se utiliza para invocar el método de la clase actual.
  5. Para hacer referencia a una clase interna. mi.g ClassName.this
  6. Para crear un objeto de la clase interna por ejemplo enclosingObjectReference.new EnclosedClass
0

si ha knowladge sobre C, C++ o punteros, en ese idioma este es un puntero que apunta objeto en sí mismo. En java todo es referencia. Entonces es una referencia a sí mismo en java. Una de las necesidades de esta palabra clave es que:

pensar que esta es la clase de

public class MyClass 
{ 
     public int myVar; 

     public int myMethod(int myVar) 
     { 
      this.myVar = myVar;  // fields is set by parameter 

     } 


} 

Si no hay esta palabra clave que se confunde es que este parametro o una clase de field.When utiliza este. myVar se refiere al campo de este objeto.

1

En general, el uso de 'esto' se reserva para las variables de instancia y métodos, no los métodos de la clase ...

métodos de clase" no puede utilizar la palabra clave this como no hay una instancia de este para referirse a ..."

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Aquí está un ejemplo trivial ...

public class Person { 
    private String name; 
    private int  age; 
    private double weight; 
    private String height; 
    private String gender; 
    private String race; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public int getAge(){ 
     return this.age; 
    } 

    public void setWeight(double weight) { 
     this.weight = weight; 
    } 

    public double getWeight() { 
     return this.weight; 
    } 

    public void setHeight(String height) { 
     this.height = height; 
    } 

    public String getHeight() { 
     return this.height; 
    } 

    public void setGender(String gender) { 
     this.gender = gender; 
    } 

    public String getGender() { 
     return this.gender; 
    } 

    public void setRace(String race) { 
     this.race = race; 
    } 

    public String getRace() { 
     return this.race; 
    } 

    public void displayPerson() { 
     System.out.println("This persons name is :" + this.getName()); 
     System.out.println("This persons age is :"  + this.getAge()); 
     System.out.println("This persons weight is :" + this.getWeight());    
     System.out.println("This persons height is :" + this.getHeight()); 
     System.out.println("This persons Gender is :" + this.getGender()); 
     System.out.println("This persons race is :" + this.getRace()); 
    } 
}  

Y para una instancia de una persona ....

public class PersonTest { 
    public static void main(String... args) { 
     Person me = new Person(); 
     me.setName("My Name"); 
     me.setAge(42); 
     me.setWeight(185.00); 
     me.setHeight("6'0"); 
     me.setGender("Male"); 
     me.setRace("Caucasian"); 
     me.displayPerson(); 
    } 
} 
-2

Esto se utiliza en java. Podemos utilizar en la herencia & también utilizar en la sobrecarga de método método & anulación. Debido a que el parámetro real o el nombre de la variable de instancia tiene el mismo nombre, podemos utilizar esta palabra clave complsary. Pero algunas veces esto no es lo mismo que cuando no podemos usar esta palabra clave complsary ..... Por ejemplo: - class super { int x; super (int x) { this.x = x } }

0

En caso de variable miembro y el conflicto nombre de variable local, esta palabra clave puede ser usado para referirse variable miembro como,

public Loan(String type, double interest){ 
this.type = type; 
this.interest = interest; 
} 
2

esta palabra clave tiene siguientes usos
1.Used para referirse instancia de clase de corriente variable

class Student{ 
int id; 
String name; 

student(int id,String name){ 
this.id = id; 
this.name = name; 
} 
void display(){System.out.println(id+" "+name);} 
public static void main(String args[]){ 
Student s1 = new Student(111,"Karan"); 
Student s2 = new Student(222,"Aryan"); 
s1.display(); 
s2.display(); 
} 
} 

este caso el parámetro y variable de instancia son los mismos es por eso que estamos utilizando este
2.Used para invocar constructor de la clase actual

class Student{ 
int id; 
String name; 
Student(){System.out.println("default constructor is invoked");} 

Student(int id,String name){ 
this();//it is used to invoked current class constructor. 
this.id = id; 
this.name = name; 
} 
void display(){System.out.println(id+" "+name);} 

public static void main(String args[]){ 
Student e1 = new Student(111,"karan"); 
Student e2 = new Student(222,"Aryan"); 
e1.display(); 
e2.display(); 
} 
}  

3.this palabra clave puede utilizarse para invocar el método clase actual (implícitamente)

4.Este se pueden pasar argumentos en la llamada al método

5.this se puede pasar argumento en la llamada al constructor

6.esto también se puede usar para devolver la instancia de clase actual

Cuestiones relacionadas