Lezione di Java 13 – Il riferimento this

Indice Lezione PrecedenteLezione Successiva


Il riferimento this in Java viene utilizzato per fare riferimento, all’interno di un metodo o di un costruttore, agli attributi o metodi locali. Questo tipo di riferimento non fa altro che puntare all’oggetto a cui appartiene risolvendo possibili problemi di ambiguità. Vediamo subito un esempio:

public class Persona {
  private String nome;
  public void setNome(String nome_pers){
    nome=nome_pers;
  }
}

In questo caso non possiamo chiamare il parametro di setNome con “nome” perchè già c’è la variabile di istanza nome, invece con il riferimento this potremo scrivere:

public class Persona {
  private String nome;
  public void setNome(String nome){
    this.nome=nome;
  }
}


L’uso fondamentale del riferimenti this è con gli oggetti in quanto viene utilizzato quando si vuole fare riferimento al proprio oggetto di appartenenza. Vediamo un uso esclusivo ci questo riferimento con i costruttori:

public class Persona {
  private String nome;
  private String cognome;
  public Persona() {
    System.out.println("Sono il costruttore di default.");
  }
  public Persona(String nome) {
    this(); // Chiama il costruttore senza parametri
    this.nome=nome;
  }
  public Persona(String nome, String cognome) {
    this(nome); // Chiama il costruttore con un parametro
    this.cognome=cognome;
  }
}

Avendo il seguente codice:

new Persona("Giustino", "Verdicchio");

verrà chiamato il costruttore con due parametri in ingresso, il quale a sua volta chiamerà il costruttore con un solo parametro, che infine chiamerà il costruttore senza parametri e stamperà:

Sono il costruttore di default.

Quando viene utilizzato il riferimento this(…), questo deve trovarsi sempre come prima linea all’interno di un metodo. Nella prossima lezione tratteremo il concetto di casting in Java.

Ti piace l’articolo?
Diventa fan su Facebook
Indice Lezione PrecedenteLezione Successiva

4 commenti su “Lezione di Java 13 – Il riferimento this”

  1. Avrei una domanda, ho questo codice di un override:

    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;

    Animale other = (Animale) obj;

    if (nome == null) {
    if (other.nome != null)
    return false;
    } else if (!nome.equals(other.nome))
    return false;
    return true;
    }

    Non riesco a capire il senso del this e di other e perchè in:
    Animale other = (Animale) obj;
    Animale è tra parentesi??

    1. Ciao, il this fa riferimento alla classe… in questo caso presumo che stai facendo l’override del metodo equals in una tua classe quindi facendo this all’interno di un metodo della classe fai riferimento alla classe… Animale è tra parentesi perchè stai facendo il cast, in questo caso (presumi) che obj è un oggetto di tipo Animale, si tratta di un downcast quindi c’è bisogno di un cast esplicito…

      in linea di massima però il codice non è chiarissimo, in genere in equals si confronta prima se è divero da null, prima di fare un cast si usa instaceof, ecc.

      Ti lascio alcuni link utili:
      http://www.datrevo.com/il-metodo-equals-per-il-confronto-degli-oggetti-lezione-10-di-java-avanzato/ (equals)

      http://www.datrevo.com/lezione-di-java-19-l%E2%80%99operatore-instanceof/ (instanceof e cast)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *