2010-11-20 18 views
7

In un costruttore della classe, sto cercando di utilizzare:L'utilizzo di questa parola chiave Java

if(theObject != null) 
    this = theObject; 

ho cercare nel database e se esiste la cronaca, io uso theObject generato da Hibernate Query.

Perché non è possibile utilizzare this?

risposta

5

this non è una variabile, ma un valore. Non puoi avere this come lvalue in un'espressione.

+2

@skaffman: dalla specifica del linguaggio Java, "la parola chiave' this' denota un ** valore ** che è un riferimento all'oggetto per il quale è stato richiamato il metodo di istanza ". Vedi http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.3 – AbdullahC

3

Perché non è possibile assegnare a this.

this rappresenta l'istanza dell'oggetto corrente, ad esempio. È possibile considerare this come riferimento immutabile all'istanza dell'oggetto il cui codice è attualmente in esecuzione.

15

È perché "questo" non è una variabile. Si riferisce al riferimento corrente. Se ti fosse permesso di riassegnare "questo", non rimarrebbe più "questo", diventerebbe "quello". Non puoi farlo.

+6

+1 analogia eccellente. –

1

"questo" si riferisce all'istanza dell'oggetto in cui il metodo viene chiamato da.

1

questa parola chiave conserva il riferimento dell'oggetto corrente. Facciamo un esempio per capirlo.

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; 
    } 
} 

Nell'esempio sopra v'è una ThisKeywordExample nome classe che consiste di due membro di dati di istanza ae b. c'è un metodo add, che prima imposta il numero in aeb, quindi restituisce l'addizione.

I membri di dati di istanza prendono la memoria quando si creta l'oggetto di quella classe e sono acceduti dalla variabile di refrenza in che manteniamo il riferimento di quell'oggetto. Nell'esempio sopra abbiamo creato l'oggetto della classe nel metodo principale e manteniamo il refrence di quell'oggetto nella variabile refrence tke. quando chiamiamo il metodo add a come si accede a e b nel metodo add perché il metodo add non ha il refrence dell'oggetto.la risposta di questa domanda chiarisce il concetto di questa parola chiave

il codice di cui sopra è trattato da JVM come

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; 
    } 
} 

le modifiche di cui sopra sono eseguite dalla JVM quindi passare automaticamente quella più parametri (refrence oggetto) nel metodo e tenerlo nella variabile refrence questo e accedere al membro di quell'oggetto istanza lancia questa variabile

Le modifiche di cui sopra vengono eseguite da JVM se si compila il codice, quindi non vi è errore di compilazione perché non è necessario fare nulla in questo.Tutto gestito dalla JVM.

Problemi correlati