2010-11-20 25 views
7

En un constructor de la clase, estoy tratando de usar:El uso de esta palabra clave Java

if(theObject != null) 
    this = theObject; 

que buscar en la base de datos y si el registro existe, yo uso theObject generado por Hibernate consulta.

¿Por qué no puedo usar this?

Respuesta

5

this no es una variable, sino un valor. No puede tener this como lvalue en una expresión.

+2

@skaffman: de la Especificación del lenguaje Java, "la palabra clave' this' denota un ** valor ** que es una referencia al objeto para el que se invocó el método de instancia ". Ver http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.3 – AbdullahC

3

Porque no se puede asignar al this.

this representa la instancia del objeto actual, es decir, usted mismo. Puede considerar this como una referencia inmutable a la instancia del objeto cuyo código se está ejecutando actualmente.

15

Es porque 'esto' no es una variable. Se refiere a la referencia actual. Si se le permitiera reasignar 'esto', ya no sería 'esto', se convertiría en 'eso'. No puedes hacer esto.

+6

+1 Excelente analogía. –

1

"this" se refiere a la instancia del objeto en el que se llama su método.

1

esta palabra clave contiene la referencia del objeto actual. Tomemos un ejemplo para comprenderlo.

class ThisKeywordExample 
{ 
    int a; 
    int b; 
    public static void main(String[] args) 
    { 
     ThisKeywordExample tke=new ThisKeywordExample(); 
     System.out.println(tke.add(10,20)); 
    } 
    int add(int x,int y) 
    { 
     a=x; 
     b=y; 
     return a+b; 
    } 
} 

En el ejemplo anterior no es una ThisKeywordExample nombre de la clase que se componen de miembro de dos datos de instancia a y b. hay un método de agregar que primero establece el número en a y b y luego devuelve la adición.

Los miembros de datos de instancia toman la memoria cuando creamos el objeto de esa clase y se accede por la variable de referencia en que tenemos la referencia de ese objeto. En el ejemplo anterior, creamos el objeto de la clase en el método principal y guardamos la referencia de ese objeto en la variable de referencia. cuando llamamos al método add cómo a y b se accede en el método add porque el método add no tiene la referencia del objeto. La respuesta a esta pregunta borra el concepto de esta palabra clave

el código anterior es tratado por la JVM como

class ThisKeywordExample 
{ 
    int a; 
    int b; 
    public static void main(String[] args) 
    { 
     ThisKeywordExample tke=new ThisKeywordExample(); 
     System.out.println(tke.add(10,20,tke)); 
    } 
    int add(int x,int y,ThisKeywordExample this) 
    { 
     this.a=x; 
     this.b=y; 
     return this.a+this.b; 
    } 
} 

los cambios anteriores se realizan por la JVM para que pase automáticamente el uno más parámetros (refrence objeto) en el método y mantenerlo en la variable refrence este y accede a la miembro de instancia de ese objeto lanzar esta variable

Los cambios anteriores los realiza JVM si compila código, entonces hay un error de compilación porque no tiene que hacer nada. Todos los son manejados por la JVM.

Cuestiones relacionadas