2015-05-27 14 views
6

Per quanto ne so questo è usato in situazioni seguenti:Dove usare "questo" in java?

  1. this parola chiave viene utilizzata quando si vuole fare riferimento alla variabile di istanza avendo stesso nome di variabile locale.
  2. Chiamare un costruttore in un altro nella stessa classe.
  3. Passa l'istanza di classe come argomento al metodo.
  4. Accesso alle variabili di classe esterna.

Ma Ho passato con il mio codice progetto in cui stanno usando questo getter come:

class a { 
    int time; 

    int getValue() { 
     return this.time * 5.; 
    } 
} 

Per quanto ne so, ogni oggetto ha la propria copia di variabili e metodi di istanza, così sarà ritornare in questo modo ha senso. Si prega di chiarire.

problema Stackoverfow cui: When should I use "this" in a class?

+3

"questo" si riferisce all'istanza dell'oggetto corrente, quindi "this.time" fa riferimento a "la propria copia delle variabili di istanza". È opzionale però. Molti programmatori non usano 'this' quando si riferiscono a variabili di istanza. Il codice @SrinathGanesh mostra comunque una bella convenzione per i costruttori. – DavidS

risposta

6

Quando si dispone di un metodo come la seguente:

public void setFoo(Foo foo) { 
    this.foo = foo; 
} 

Uso this è obbligatoria. Altrimenti, assegnerebbe l'argomento foo a se stesso, invece di assegnarlo alla variabile di istanza.

Ma ciò non significa che è l'unica situazione che è possibile utilizzare this. Il codice seguente è strettamente equivalenti:

public void setFoo(Foo newFoo) { 
    this.foo = newFoo; 
} 

Anche se in questo caso, si potrebbe benissimo scrivere

public void setFoo(Foo newFoo) { 
    foo = newFoo; 
} 

perché this non è necessaria più. Questo non lo rende illegale.

Quindi,

int getValue() { 
    return time * 5; 
} 

e

int getValue() { 
    return this.time * 5; 
} 

sono rigorosamente equivalenti.

9

Molte persone (io sono uno di loro) usano le parole chiave this anche quando non è esplicitamente necessario.

  • Alcune persone trovano più chiaro per mettere this di fronte a tutto ciò che appartengono alla stessa classe, la stessa logica si applica a super.
  • Alcune persone usano sempre this di riflesso per un migliore completamento automatico (pop-up visualizzato automaticamente, programmatore pigro) in alcuni IDE.

Questi punti sono per lo più basati su e non contano davvero.

Per gli altri usi, come menzionato, può essere utilizzato per passare un parametro a un altro costruttore, passare l'istanza di classe o distinto quando si hanno due variabili con lo stesso nome.

Tuttavia, IMO, è molto più semplice non avere più variabili con lo stesso nome.

1

La parola chiave "this" viene utilizzata per fare riferimento all'oggetto di riferimento corrente in uso. Questo è solo usato come zucchero sintattico per rendere più facile svolgere determinati compiti come invocare costruttori nella stessa classe, accedere ai campi della stessa classe, tipi di parametri ..

Ecco un esempio di due diversi stili di programmazione. Entrambi fanno la stessa cosa ma il primo esempio usa 'this' per richiamare esplicitamente il costruttore.

1

La parola chiave "questo" viene spesso utilizzata all'interno delle classi anonime per fare riferimento ai campi nella classe contenente. Ad esempio:

public class App 
{ 
    public String myString = "This is Java"; 
    public App() 
    { 
     JButton button = new JButton("Test"); 
     button.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) 
     { 
      System.out.println(App.this.myString); // <-- App.this gives access to public fields in App 
     }}); 
    } 
}