- 1 1. Introduzione
- 2 3. Principali casi d’uso di this
- 3 4. Note Importanti Quando Si Usa “this”
- 4 5. Esempi di Codice Pratici
- 4.1 5.1 Distinguere Variabili di Classe e Variabili Locali
- 4.2 5.2 Chaining del Costruttore
- 4.3 5.3 Chaining dei Metodi
- 4.4 5.4 Passare l’Istanza Corrente
- 4.5 6. Domande Frequenti (FAQ)
- 4.6 Q1. Devo scrivere “this” tutto il tempo?
- 4.7 Q2. Cosa succede se uso “this” all’interno di un metodo statico?
- 4.8 Q3. Qual è la differenza tra “this” e “super”?
- 4.9 Q4. Qual è il vantaggio di restituire “this” nel chaining dei metodi?
- 4.10 Q5. Cosa succede se dimentico di usare this quando è necessario?
- 4.11 7. Conclusione
1. Introduzione
Quando inizi a studiare la programmazione in Java, incontrerai varie parole chiave. Tra queste, “this” svolge un ruolo molto importante nella comprensione delle classi e dei concetti orientati agli oggetti. Tuttavia, poiché la parola “this” significa semplicemente “questo/questo qui” in inglese, molti principianti inizialmente trovano poco chiaro il motivo per cui viene usata nella programmazione.
Questo articolo spiega il ruolo e l’uso della parola chiave “this” in Java in modo chiaro e adatto ai principianti. Imparerai punti chiave come distinguere le variabili membro dalle variabili locali e usare “this” nei costruttori, insieme a esempi di codice pratici.
Tratteremo anche domande comuni, errori frequenti e note importanti. Alla fine di questa guida, comprenderai come funziona la parola chiave this e come usarla con sicurezza, dal livello base a scenari più avanzati.
2. Che cos’è la parola chiave “this”?
In Java, “this” si riferisce all’oggetto corrente stesso. Quando un’istanza (oggetto) viene creata a partire da una classe, la parola chiave “this” è usata per riferirsi a quell’oggetto specifico.
Anche se vengono creati più oggetti dalla stessa classe, il this di ciascun oggetto si riferisce a un’istanza diversa. Questo aiuta a chiarire “a quale oggetto si sta operando” all’interno del tuo codice.
I ruoli base di this
- Accesso a variabili e metodi di istanza
Usarethis.nomeVariabileothis.nomeMetodo()consente di accedere alle variabili e ai metodi dell’oggetto specifico. - Distinguere le variabili locali da quelle di istanza
Quando i parametri del costruttore o del metodo hanno lo stesso nome delle variabili membro, “this” viene usato per distinguerle.
Perché abbiamo bisogno di “this”?
In Java è possibile creare più oggetti da una singola classe, ognuno con stato e comportamento indipendenti. All’interno di questi oggetti serve un modo per riferirsi a “questo oggetto stesso”.
Ecco che entra in gioco la parola chiave “this”.
Ad esempio, all’interno di una classe Persona, usare “this” permette di esprimere “questo particolare oggetto Persona”.
Riepilogo
“this” è un concetto molto importante nella programmazione orientata agli oggetti. Funziona come un ponte che consente a un oggetto di accedere ai propri dati e al proprio comportamento.
3. Principali casi d’uso di this
La parola chiave “this” compare in molti contesti in Java. Di seguito sono riportati esempi rappresentativi con campioni di codice.
3.1 Distinguere le variabili membro dalle variabili locali
In Java è frequente usare lo stesso nome per i parametri del costruttore e per le variabili membro. In questi casi, “this” le distingue.
Esempio: Distinguere le variabili membro dalle variabili locali
public class Student {
private String name;
public Student(String name) {
this.name = name; // Left: member variable, Right: constructor parameter
}
}
Se ometti this, la variabile locale ha la precedenza e la variabile membro non verrà assegnata correttamente.
3.2 Usare this nei costruttori
Java consente più costruttori tramite l’overloading dei costruttori. È possibile chiamare un altro costruttore usando this() per ridurre la duplicazione.
Esempio: Chiamare un altro costruttore con this()
public class Book {
private String title;
private int price;
public Book(String title) {
this(title, 0); // calls another constructor
}
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
Questo aiuta a centralizzare la logica di inizializzazione e a prevenire codice duplicato.
3.3 Method Chaining (incatenamento di metodi)
Restituire this rende possibile chiamare metodi consecutivamente sulla stessa istanza.
Esempio: Method chaining
public class Person {
private String name;
private int age;
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
}
// Method chaining
Person p = new Person().setName("佐藤").setAge(25);
È ampiamente usato nei pattern builder e nelle classi di configurazione.
3.4 Passare l’Istanza Corrente
Puoi usare “this” quando devi passare l’istanza corrente a un altro metodo o classe.
Esempio: Passare l’oggetto corrente
public class Printer {
public void print(Person person) {
System.out.println(person);
}
}
public class Person {
public void show(Printer printer) {
printer.print(this); // passes this instance
}
}
4. Note Importanti Quando Si Usa “this”
Sebbene molto utile, “this” deve essere usato con attenzione per evitare errori.
4.1 “this” Non Può Essere Usato in Contesti statici
Un metodo o variabile static appartiene alla classe stessa—non a un’istanza—quindi “this” non può essere usato.
Esempio non valido
public class Example {
private int value;
public static void printValue() {
// System.out.println(this.value); // Compile error
}
}
4.2 L’Uso Eccessivo di “this” Può Ridurre la Leggibilità
Usare “this” inutilmente può rendere il codice più difficile da leggere. Usalo solo quando necessario.
Esempio di utilizzo non necessario
public class Test {
private int x;
public void setX(int x) {
this.x = x; // needed
// this.x = this.x + 1; // excessive use
}
}
4.3 Non Confondere “this” Con “super”
- this → l’istanza corrente
- super → il genitore (superclasse)
Esempio: Uso di this vs super
public class Parent {
public void greet() {
System.out.println("Parent method");
}
}
public class Child extends Parent {
public void greet() {
System.out.println("Child method");
super.greet();
}
}
5. Esempi di Codice Pratici
5.1 Distinguere Variabili di Classe e Variabili Locali
public class Account {
private String owner;
public Account(String owner) {
this.owner = owner;
}
public void printOwner() {
System.out.println("Account Owner: " + this.owner);
}
}

5.2 Chaining del Costruttore
public class Rectangle {
private int width;
private int height;
public Rectangle(int width) {
this(width, 1);
}
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
public void printSize() {
System.out.println("Size: " + width + " x " + height);
}
}
5.3 Chaining dei Metodi
public class BuilderExample {
private String name;
private int age;
public BuilderExample setName(String name) {
this.name = name;
return this;
}
public BuilderExample setAge(int age) {
this.age = age;
return this;
}
public void printInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
BuilderExample person = new BuilderExample().setName("山田").setAge(30);
person.printInfo();
5.4 Passare l’Istanza Corrente
public class Notifier {
public void notifyUser(User user) {
System.out.println(user.getName() + " has been notified.");
}
}
public class User {
private String name;
public User(String name) { this.name = name; }
public String getName() { return this.name; }
public void sendNotification(Notifier notifier) {
notifier.notifyUser(this);
}
}
Notifier notifier = new Notifier();
User user = new User("佐藤");
user.sendNotification(notifier);
6. Domande Frequenti (FAQ)
Q1. Devo scrivere “this” tutto il tempo?
R.
Non sempre. Usalo quando:
- i nomi delle variabili locali e di classe si sovrappongono
- vuoi fare riferimento esplicitamente all’istanza corrente
Q2. Cosa succede se uso “this” all’interno di un metodo statico?
R.
Otterrai un errore di compilazione. I metodi statici appartengono alla classe, non a un’istanza.
Q3. Qual è la differenza tra “this” e “super”?
- this : l’istanza corrente
- super : la classe genitore
Q4. Qual è il vantaggio di restituire “this” nel chaining dei metodi?
Consente chiamate consecutive sulla stessa istanza, migliorando la leggibilità.
Q5. Cosa succede se dimentico di usare this quando è necessario?
Le variabili locali possono sovrascrivere le variabili membro, causando assegnazioni errate e bug.
7. Conclusione
Questo articolo ha spiegato la parola chiave Java “this” dalle basi all’uso pratico. Hai imparato:
- Come distinguere le variabili membro dalle variabili locali
- Come centralizzare la logica del costruttore
- Come creare catene di metodi
- Come passare l’istanza corrente ad altri metodi
Abbiamo anche trattato note importanti come:
- “this” non può essere usato in contesti statici
- Non abusare di “this”
- Usalo correttamente con “super”
Comprendere come funziona “this” renderà il design delle tue classi Java più chiaro e ridurrà i bug. Continua a esplorare i fondamenti di Java e applica questi concetti nel codice reale.
