Menu
Coddy logo textTech

La parola chiave final

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 13 di 87.

La parola chiave final in Java impedisce le modifiche. Può essere applicata a variabili, metodi e classi, con effetti diversi in ciascun caso.

Quando viene applicato a una variabile, final la rende una costante: una volta assegnato, il suo valore non può cambiare:

public class Circle {
    private final double PI = 3.14159;
    private final double radius;
    
    public Circle(double radius) {
        this.radius = radius;  // Può essere assegnata una sola volta nel costruttore
    }
    
    public void setRadius(double r) {
        // this.radius = r;  // Errore! Non è possibile riassegnare una variabile final
    }
}

Una variabile final deve essere inizializzata al momento della dichiarazione oppure nel costruttore. Dopodiché, qualsiasi tentativo di riassegnarla causa un errore di compilazione.

Per i tipi di riferimento, final significa che il riferimento non può puntare a un oggetto diverso, ma il contenuto dell'oggetto può comunque cambiare:

private final StringBuilder name = new StringBuilder("John");

// name = new StringBuilder("Jane");  // Errore! Non si può riassegnare
name.append(" Doe");  // OK! Il contenuto dell'oggetto può cambiare

Usare final con i campi comunica chiaramente l’intento: indica agli altri sviluppatori che questo valore non deve mai cambiare dopo l’inizializzazione. È particolarmente utile per i valori di configurazione, gli ID o qualsiasi dato che deve rimanere costante per tutta la durata di vita di un oggetto.

challenge icon

Sfida

Facile

Costruiamo un sistema di registrazione degli Student che usa la parola chiave final per proteggere i dati che non dovrebbero mai cambiare dopo la registrazione di uno studente.

Creerai due file per organizzare il codice:

  • Student.java: crea una classe Student in cui alcune informazioni vengono bloccate in modo permanente una volta impostate:
    • Un campo final studentId (String) - assegnato al momento della creazione e che non può mai cambiare
    • Un campo final enrollmentYear (int) - l'anno in cui lo studente si è iscritto, anch'esso permanente
    • Un normale campo privato name (String) - può essere aggiornato se lo studente cambia nome
    • Un costruttore che accetta tutti e tre i valori e inizializza i campi
    • Un getter getStudentId() per l'ID dello studente
    • Un getter getEnrollmentYear() per l'anno di iscrizione
    • Un getter getName() e un setter setName() per il nome
    • Un metodo getInfo() che restituisce: "ID: [studentId] | Name: [name] | Enrolled: [enrollmentYear]"
  • Main.java: crea un oggetto Student, poi aggiorna il suo nome e visualizza le sue informazioni. Riceverai quattro input: l'ID dello studente, il nome iniziale, l'anno di iscrizione e il nuovo nome da assegnare. Stampa due righe:
    • Le informazioni dello studente prima del cambio di nome
    • Le informazioni dello studente dopo il cambio di nome

Riceverai quattro input nell'ordine seguente: studentId (String), name (String), enrollmentYear (int) e newName (String).

Nota come i campi final proteggono l'ID dello studente e l'anno di iscrizione: sono dati permanenti che non dovrebbero cambiare, mentre il nome può essere aggiornato tramite il relativo setter.

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi i dati in input
        String studentId = scanner.nextLine();
        String name = scanner.nextLine();
        int enrollmentYear = scanner.nextInt();
        scanner.nextLine(); // consuma il carattere di nuova riga
        String newName = scanner.nextLine();
        
        // TODO: Crea un oggetto Student con i valori iniziali
        
        // TODO: Stampa le informazioni dello studente prima della modifica del nome
        
        // TODO: Aggiorna il nome dello studente usando il setter
        
        // TODO: Stampa le informazioni dello studente dopo la modifica del nome
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online