Variabili Java Spiegate: Tipi, Ambito, var, final e Errori Comuni

目次

1. Cosa sono le “variabili” in Java?

Quando inizi a studiare Java, uno dei primi concetti importanti che incontri è la “variabile”.
In breve, una variabile è un contenitore usato per memorizzare temporaneamente valori (dati) all’interno di un programma così da poterli riutilizzare quante volte è necessario.

Tuttavia, in Java ti bloccherai rapidamente se memorizzi le variabili semplicemente come “scatole”.
Questo perché le variabili Java sono gestite insieme a un “tipo” (il tipo di dato).

In questa sezione organizzeremo il ruolo delle variabili e il modo di pensare specifico di Java (l’importanza dei tipi) per i principianti.

1.1 Cosa puoi fare con le variabili (memorizzare valori e riutilizzarli)

Con le variabili, un programma può passare da “calcoli una tantum” a “elaborazioni significative”.

Ad esempio, puoi scrivere numeri direttamente così:

System.out.println(100 + 20);

Questo funziona, ma i valori non hanno significato, quindi chi legge il codice più tardi (incluso il tuo futuro io) avrà difficoltà.
Non saprai “Che cos’è 100?” o “Che cos’è 20?”

Usando le variabili, puoi dare un significato ai valori.

int price = 100;
int tax = 20;
System.out.println(price + tax);

Utilizzare le variabili in questo modo offre i seguenti vantaggi:

  • Più facile comprendere l’intento (nomi come prezzo e tassa trasmettono significato)
  • Puoi riutilizzare i valori più volte (non è necessario scrivere lo stesso valore più e più volte)
  • Più facile da modificare in seguito (se l’aliquota fiscale cambia, devi modificare solo il valore della variabile)
  • Puoi conservare risultati intermedi (scomponi logiche complesse in passaggi più piccoli)

Specialmente per un principiante, va bene pensare a “variabili = dare un nome ai valori”.
Tuttavia, in Java il concetto successivo—i “tipi”—arriva sempre come un insieme.

1.2 Le variabili Java sono usate con i “tipi” (sicurezza dei tipi)

In Java, le variabili vengono generalmente create nella seguente forma:

type variableName = value;

Esempio:

int age = 20;
String name = "Sagawa";

Il punto chiave qui è il tipo.

  • int è un intero (es. 20, 100, -5)
  • String è una stringa (es. “Hello”, “Java”)

In Java, quando crei una variabile, dichiari esplicitamente “che tipo di valore questa variabile può contenere”.
Grazie a questo sistema, Java ha dei punti di forza come i seguenti.

Cosa significa “type‑safe”?

Poiché specifichi i tipi, Java può impedirti di inserire un valore del tipo sbagliato in una variabile.

Ad esempio, se provi a mettere una stringa in una variabile int, otterrai un errore di compilazione.

int age = "20"; // This is an error

Questo non è un inconveniente—è in realtà utile.
Invece di “rompersi dopo aver eseguito il programma”, puoi “rilevare gli errori prima di eseguirlo”.

I principianti a volte pensano che “Java abbia molti errori” a causa di questo, ma se cambi prospettiva:

  • Java trova le incongruenze di tipo in anticipo
  • Più grande è il progetto, più i tipi aiutano a ridurre gli incidenti

Quest’idea—“i tipi e le variabili arrivano come un set”—è una delle basi più fondamentali di Java.

Nota: Anche con le “variabili” ci sono “valori” e “riferimenti”

Le variabili Java sono gestite in due modi principali:

  • Tipi primitivi: gestiscono direttamente il valore (es. int, double, boolean)
  • Tipi di riferimento: gestiscono non il valore stesso, ma la posizione (riferimento) dove il valore è memorizzato (es. String, array, classi)

Non approfondiremo qui, ma è un punto di confusione comune per i principianti, quindi vale la pena menzionarlo fin da subito.

Ad esempio, String è un tipo di riferimento.
Può sembrare che tu stia “memorizzando una stringa”, ma in realtà stai tenendo “un riferimento a un oggetto stringa”.

Questa differenza è collegata anche a temi che imparerai più tardi, come “== vs equals” e “come si comporta final”.

2. Nozioni di base sulle variabili: differenza tra dichiarazione, assegnazione e inizializzazione

Per comprendere correttamente le variabili Java,
è importante organizzare le differenze tra “dichiarazione”, “assegnazione” e “inizializzazione”.

I principianti spesso usano queste tre parole come se avessero lo stesso significato,
ma in realtà hanno ruoli chiaramente diversi.

Se mantieni questa ambiguità,
è più probabile che finisca nello stato di
“Non so perché è un errore” o “Non so perché non posso usarlo.”

2.1 Dichiarazione: Prepararsi a Usare una Variabile

Dichiarazione significa dire a Java:
“Sto per usare una variabile con questo nome,” e “il suo tipo è questo.”

La dichiarazione più basilare appare così:

int count;

A questo punto, sono successe solo queste due cose:

  • Creare una variabile chiamata count
  • Decidere che il suo tipo è int (un intero)

Nessun valore è stato ancora memorizzato.

Questa è una comune idea sbagliata dei principianti:
dichiarare una variabile da sola non la rende “pronta all’uso.”

2.2 Assegnazione: Inserire un Valore in una Variabile

Assegnazione significa inserire un valore in una variabile che è già stata dichiarata.

count = 10;

Questo = non significa “uguale” in matematica.
Significa mettere il valore a destra nella variabile a sinistra.

Quindi il flusso diventa:

int count;   // declaration
count = 10;  // assignment

Questa è l’idea.

Nota: Non Puoi Assegnare a una Variabile Non Dichiarata

Il codice seguente genera un errore:

count = 10; // Error: count has not been declared

In Java, l’ordine deve essere dichiarazione → assegnazione.

2.3 Inizializzazione: Assegnare un Valore al Momento della Dichiarazione

Inizializzazione significa fare dichiarazione e assegnazione allo stesso tempo.

int count = 10;

Questo è semanticamente lo stesso di queste due righe:

int count;
count = 10;

In Java—sia nel lavoro reale sia nell’apprendimento—
nella maggior parte dei casi, va bene assumere che userai “inizializzazione.”

Questo perché ha i seguenti vantaggi:

  • La variabile diventa utilizzabile nel momento in cui è creata
  • Previene errori causati da variabili non inizializzate
  • Il codice diventa più facile da leggere

Quindi, come principiante, è consigliato sviluppare l’abitudine di
“inizializzare le variabili al momento in cui le dichiari.”

2.4 Perché Non Puoi Usare una Variabile Solo con una Dichiarazione (Regole delle Variabili Locali)

In Java, esistono regole molto rigide per le variabili locali (variabili all’interno dei metodi). Java è particolarmente severo in questo aspetto.

Il codice seguente genera un errore di compilazione:

int number;
System.out.println(number); // Error

Il motivo è chiaro:

Le variabili locali non possono essere usate a meno che non siano inizializzate

Quella regola esiste.

Java tratta lo stato “non sappiamo cosa c’è dentro number” come
uno stato pericoloso e lo blocca come errore prima dell’esecuzione.

Questo può sembrare severo per i principianti, ma nello sviluppo su larga scala,
è un meccanismo di sicurezza molto importante.

2.5 Dichiarare più Variabili in una Volta (Con Cautela)

In Java, puoi dichiarare più variabili dello stesso tipo insieme.

int x, y, z;

Puoi anche scriverlo così:

int a = 1, b = 2, c = 3;

Questo è sintatticamente corretto, ma può ridurre la leggibilità, quindi fai attenzione.

Specialmente per i principianti e lo sviluppo in team, è più sicuro scrivere:

int a = 1;
int b = 2;
int c = 3;

come una variabile per riga.

2.6 Riepilogo della Sezione

Punti chiave da ricordare da questa sezione:

  • Dichiarazione : decide il nome e il tipo della variabile
  • Assegnazione : inserire un valore in una variabile
  • Inizializzazione : dichiarare e assegnare allo stesso tempo
  • Le variabili locali non possono essere usate a meno che non siano inizializzate
  • Come principiante, usa “dichiarazione + inizializzazione” come impostazione predefinita

3. Comprendere i “Tipi” di Variabile (Tipi Primitivi e Tipi di Riferimento)

Quando si lavora con le variabili Java, non si può evitare di comprendere i tipi. Ciò che spesso confonde i principianti è:

  • Perché ci sono così tanti tipi
  • Perché i numeri hanno sia int che double
  • Come String differisce dai tipi numerici

.In questa sezione, organizzeremo i tipi Java da due prospettive:
“tipi primitivi” e “tipi di riferimento.”

3.1 I tipi Java rientrano in due grandi categorie

I tipi di variabili Java possono essere classificati in modo generico nelle seguenti due categorie:

  1. Tipi primitivi
  2. Tipi di riferimento

Una volta compresa questa classificazione, gli argomenti che imparerai in seguito — come “== vs equals”, “come si comporta final” e “come funziona la memoria” — diventano molto più facili da capire.

3.2 Cosa sono i tipi primitivi? (Tipi che contengono il valore stesso)

I tipi primitivi sono tipi che contengono direttamente il valore stesso.

Di seguito alcuni tipi primitivi comuni:

int count = 10;
double price = 19.99;
boolean isActive = true;

Queste variabili memorizzano
il “valore stesso” all’interno della variabile.

Tipi primitivi più usati

TypeMeaningExample Use
intIntegerCounts, age, number of times
longLarge integerAmounts of money, IDs
doubleDecimalPrices, ratios
booleanTrue/falseFlag checks
charSingle characterCharacter processing

Come principiante, è sufficiente prima padroneggiare int, double e boolean.

3.3 Caratteristiche e avvertenze dei tipi primitivi

I tipi primitivi hanno le seguenti caratteristiche:

  • Contengono il valore stesso
  • Sono veloci da elaborare
  • Non è possibile assegnare null
  • La dimensione è fissa

Ad esempio, nel codice seguente,
a e b contengono valori completamente indipendenti.

int a = 5;
int b = a;
b = 10;

In questo caso:

  • a rimane 5
  • b cambia a 10

Questo è il risultato.

Ciò è dovuto al fatto che il valore stesso è stato copiato.

3.4 Cosa sono i tipi di riferimento? (Tipi che gestiscono dove vive il valore)

D’altra parte, i tipi di riferimento
sono tipi che non gestiscono il valore stesso, ma la posizione (riferimento) dove il valore esiste.

I tipici tipi di riferimento includono:

String name = "Java";
int[] numbers = {1, 2, 3};
  • String
  • Array
  • Classi
  • Interfacce
  • Collezioni come List / Map

Tutti questi sono tipi di riferimento.

Comprendere i tipi di riferimento con un’immagine

Una variabile di tipo riferimento contiene:

  • non l’oggetto reale stesso, ma
  • un “indirizzo” che punta a dove l’oggetto reale è memorizzato

Questo è il modello mentale.

3.5 Cosa succede quando assegni tipi di riferimento?

Guarda il codice seguente:

String a = "Hello";
String b = a;
b = "World";

In questo caso:

  • a è “Hello”
  • b è “World”

Questo è il risultato.

Se ti limiti a guardare questo, potresti pensare,
“Non è lo stesso dei tipi primitivi?”

E per quanto riguarda l’esempio successivo?

int[] array1 = {1, 2, 3};
int[] array2 = array1;

array2[0] = 100;

Il risultato è:

  • array1[0] → 100
  • array2[0] → 100

Ciò avviene perché array1 e array2 si riferiscono allo stesso array.

Con i tipi di riferimento:

  • Assegnare variabili può farle “puntare allo stesso oggetto reale”
  • Modificare il contenuto può influenzare tutte le variabili che lo riferiscono

Questa è la caratteristica chiave.

3.6 Punti di confusione comuni per i principianti

Riassumiamo i punti di difficoltà più comuni:

  • Tipi primitivi → il valore è copiato
  • Tipi di riferimento → il riferimento (posizione) è copiato

Questa differenza è strettamente legata ai seguenti argomenti:

  • La differenza tra == e .equals()
  • Cosa succede quando si usa final
  • Come il passaggio di valori come argomenti di metodo influisce su ambito e comportamento

Per ora, è sufficiente ricordare solo questo:
i tipi di riferimento a volte possono condividere lo stesso oggetto reale.

3.7 Riepilogo della sezione

  • I tipi Java sono divisi in tipi primitivi e tipi di riferimento
  • I tipi primitivi gestiscono “il valore stesso”
  • I tipi di riferimento gestiscono “la posizione (riferimento) del valore”
  • Con i tipi di riferimento, l’assegnazione e le modifiche possono influenzare altre variabili

4. Tipi di variabili (dove vivono) e ambito (dove sono validi)

In Java, le variabili non differiscono solo per “tipo”.
Il loro comportamento cambia anche a seconda di dove sono dichiarate (dove vivono).

Se non comprendi questa differenza, potresti confonderti su cose come:

  • “Non posso usare la variabile che ho dichiarato prima”
  • “Ha lo stesso nome, ma il valore è diverso”
  • “Non capisco perché non posso fare riferimento ad essa qui”

In questa sezione, organizzeremo
tipi di variabili e ambito per i principianti.

4.1 Cos’è l’Ambito? (Dove può essere usata una variabile)

Ambito significa
l’intervallo in cui una variabile può essere usata.

In Java, l’ambito è determinato rigidamente da:

  • dove la variabile è dichiarata
  • l’intervallo delle parentesi graffe { }

La regola di base è molto semplice:

Una variabile può essere usata solo all’interno del blocco in cui è dichiarata

4.2 Variabili Locali (Variabili all’interno dei Metodi)

Le variabili locali sono variabili dichiarate all’interno di metodi o blocchi (come if e for).

public void sample() {
    int x = 10;  // local variable
    System.out.println(x);
}

Questo x ha queste caratteristiche:

  • Valido solo all’interno del metodo sample
  • Scompare quando il metodo termina

Esempio di Ambito con Blocchi

if (true) {
    int y = 5;
    System.out.println(y);
}

System.out.println(y); // Error

Poiché y è dichiarata all’interno del blocco if, non può essere usata al di fuori di esso.

Regole Importanti per le Variabili Locali

Le variabili locali hanno regole rigide:

  • Non puoi usarle se non sono inizializzate
  • Nessun valore predefinito è assegnato automaticamente
    int value;
    System.out.println(value); // compile-time error
    

Questo fa parte del design di sicurezza di Java per evitare l’uso di “valori non definiti”.

4.3 Campi (Variabili d’Istanza)

I campi sono variabili dichiarate all’interno di una classe ma al di fuori dei metodi.

public class Sample {
    int count;  // field (instance variable)

    public void printCount() {
        System.out.println(count);
    }
}

I campi hanno caratteristiche diverse dalle variabili locali:

  • Ogni istanza della classe ha la propria copia
  • Sono automaticamente inizializzate con valori predefiniti
  • Possono essere usate da qualsiasi metodo della classe

Valori Predefiniti per i Campi

A seconda del tipo, i seguenti valori predefiniti sono impostati automaticamente:

  • int → 0
  • double → 0.0
  • boolean → false
  • Tipi di riferimento → null

Quindi il seguente codice non produce un errore:

public class Sample {
    int count;

    public void print() {
        System.out.println(count); // 0
    }
}

Tuttavia, fare troppo affidamento sui valori predefiniti non è consigliato.
L’inizializzazione esplicita rende più chiara l’intenzione del codice.

4.4 Variabili statiche (Variabili di Classe)

Una variabile con static diventa
una variabile condivisa in tutta la classe.

public class Counter {
    static int total = 0;
}

Questo total ha queste caratteristiche:

  • Ne esiste solo una per classe
  • Condivisa da tutte le istanze

Modello Mentale per le Variabili statiche

  • Variabili d’istanza → il portafoglio di ogni persona
  • Variabili statiche → la cassaforte condivisa di un’azienda

Quel modello rende più facile la comprensione.

Avvertenze per le Variabili statiche

Le variabili statiche sono utili, ma memorizzare troppi stati può causare bug.

  • È difficile tracciare dove sono avvenuti i cambiamenti
  • Il testing diventa più difficile
  • I problemi sono più probabili nell’elaborazione concorrente

Come principiante, è consigliato limitare l’uso a cose come:

  • Costanti
  • Valori di configurazione condivisi

e scopi simili.

4.5 Attenzione alle Variabili con lo Stesso Nome (Shadowing)

Guarda il seguente codice:

public class Sample {
    int value = 10;

    public void test() {
        int value = 5;
        System.out.println(value);
    }
}

In questo caso, l’output è 5.

Questo perché la variabile locale sta nascondendo il campo (shadowing).

Poiché questa è una fonte comune di confusione per i principianti:

  • Evita nomi di variabili duplicati
  • Non riutilizzare lo stesso nome a meno che non sia intenzionale

Questa disciplina è importante.

4.6 Riepilogo della Sezione

answer. Lo scope significa “l’intervallo in cui una variabile può essere usata” * Le variabili locali sono valide solo all’interno dei blocchi e devono essere inizializzate * I campi ricevono automaticamente valori predefiniti * Le variabili static* sono condivise all’interno della classe * Fai attenzione all’ombreggiamento causato da variabili con lo stesso nome

5. Utilizzare correttamente var (inferenza di tipo) in Java 10+

Introdotto in Java 10, var è
un modo per consentire al compilatore di inferire il tipo di una variabile.

Può sembrare comodo, ma se usato in modo improprio può facilmente portare a “codice difficile da leggere”.
Perciò è importante comprendere le regole e quando usarlo.

5.1 Cos’è var? (Come funziona senza scrivere il tipo)

In Java normale, dichiari una variabile così:

String message = "Hello";

Con var, puoi scrivere:

var message = "Hello";

A questo punto, Java guarda il lato destro "Hello" e decide:

  • Questa variabile è di tipo String

Il punto importante è che var non è tipizzazione dinamica.

  • Il tipo è determinato al momento della compilazione
  • Il tipo non cambia a runtime

Quindi pensa a var come a “una scorciatoia che ti permette di omettere il tipo”.

5.2 Dove puoi e dove non puoi usare var

var può essere usato solo in luoghi strettamente definiti.

Dove puoi usarlo

  • Solo variabili locali
    public void sample() {
        var count = 10;
    }
    

Dove non puoi usarlo

Tutti i seguenti usi generano errori:

var x;                 // No initialization → error
var y = null;          // Cannot infer the type → error

class Sample {
    var value = 10;    // Cannot be used for fields → error
}

Il motivo di queste restrizioni è chiaro: evitare di ridurre leggibilità e sicurezza.

5.3 Vantaggi dell’uso di var

var brilla quando
il tipo tende a diventare lungo.

ArrayList<String> list = new ArrayList<String>();

Con var:

var list = new ArrayList<String>();

Diventa molto più pulito.

In altre parole, var è utile quando:

  • I generics sono lunghi
  • Il tipo è ovvio dal lato destro

Usato in questo modo, può migliorare la leggibilità.

5.4 Insidie di var (Errori comuni per i principianti)

var è comodo, ma se i principianti lo usano troppo, possono verificarsi i seguenti problemi.

Il tipo diventa difficile da vedere

var data = getData();

Da questa sola riga, non puoi capire:

  • Qual è il tipo dei dati
  • Cosa contiene

In casi come questo, è più sicuro scrivere esplicitamente il tipo.

Data data = getData();

Può diventare un tipo non intenzionale

var number = 10;   // int

I principianti spesso incontrano casi come “Pensavo fosse lungo”.

Quando non scrivi il tipo esplicitamente, la tua intenzione e il tipo effettivamente inferito possono divergere, quindi fai attenzione.

5.5 Come decidere se usare var

Se non sei sicuro, usa questi criteri:

  • Se il tipo è ovvio dal lato destro → var va bene
  • Se il tipo ha un significato importante → scrivi il tipo esplicitamente
  • Codice per principianti / di apprendimento → scrivi il tipo il più possibile
  • Sviluppo in team → segui gli standard di codifica

Specialmente durante l’apprendimento, scrivere il tipo aiuta a approfondire la comprensione, quindi non è necessario forzarsi a usare var.

5.6 Riepilogo della sezione

  • var è una scorciatoia per l’inferenza di tipo
  • Non è tipizzazione dinamica; il tipo è fissato al momento della compilazione
  • È valido solo per variabili locali e richiede l’inizializzazione
  • È importante distinguere quando migliora o riduce la leggibilità

6. “Non voglio cambiare questo valore”—final e l’idea di costanti

In Java, l’idea di progettazione “una volta che un valore è deciso, non lasciarlo cambiare in seguito” è molto importante.

Lo strumento per questo è final.

I principianti spesso pensano che “final sia qualcosa che si mette sulle costanti”, ma in realtà ha un significato più ampio.

6.1 Cos’è final? (Impedire la riassegnazione)

.

Una variabile dichiarata final non può essere riassegnata dopo che l’hai assegnata una volta.

final int maxCount = 10;
maxCount = 20; // compile-time error

La regola è molto semplice:

  • Puoi inizializzarla
  • Non puoi riassegnarla

È tutto quello che devi ricordare.

6.2 Perché usare final su variabili locali?

Aggiungere final a una variabile locale rende chiaro che:

  • Questa variabile non cambia a metà percorso
  • Il valore è fisso

Aiuta a esprimere chiaramente la tua intenzione nel codice.

final int basePrice = 100;
int total = basePrice + 20;

Scriverlo in questo modo:

  • Aiuta a prevenire modifiche accidentali
  • Fa sentire il lettore più sicuro

Questi sono i vantaggi.

6.3 Usare final sui campi

Aggiungere final a un campo lo rende
un valore immutabile per quell’istanza.

public class User {
    final String name;

    public User(String name) {
        this.name = name;
    }
}

In questo caso:

  • name può essere impostato una sola volta nel costruttore
  • Non può essere modificato successivamente

Questo è un approccio di design importante per stabilizzare lo stato dell’oggetto.

6.4 Nota importante per final con tipi di riferimento (confusione comune per i principianti)

Questo è un punto molto importante:

final int[] numbers = {1, 2, 3};
numbers[0] = 100;   // OK
numbers = new int[]{4, 5, 6}; // Error

Perché succede?

Il motivo è che final limita “la riassegnazione del riferimento”.

  • Modificare il contenuto dell’array → OK
  • Cambiare a quale array il riferimento punta → NG

In altre parole, final non rende i contenuti immutabili.

Se non capisci questo, potresti confonderti e pensare:

  • “Perché può cambiare anche se è final?”
  • “È un bug?”

Ecco perché questa distinzione è importante.

6.5 Che cos’è una costante? (static final)

In Java, quello che la gente chiama comunemente “costante” è tipicamente definito con static final per convenzione.

public class Config {
    public static final int MAX_USERS = 100;
}

Questo tipo di costante presenta le seguenti caratteristiche:

  • Condivisa in tutta la classe
  • Il valore non può essere modificato
  • Puoi darle un nome significativo

Convenzione di denominazione per le costanti

Le costanti sono generalmente scritte nello stile seguente:

UPPER_SNAKE_CASE

Esempio:

static final double TAX_RATE = 0.1;

6.6 Come decidere quando usare final

Come principiante, i seguenti criteri sono facili da applicare:

  • Se il valore non deve cambiare → aggiungi final
  • Valori di configurazione / valori di base → usa static final
  • Se modifiche accidentali sarebbero problematiche → aggiungi final

Specialmente nella pratica, un atteggiamento comune è:

“Se non sei sicuro, aggiungi final.”

In molti casi, è un buon compromesso.

6.7 Riepilogo della sezione

  • Con final, non puoi riassegnare la variabile
  • Puoi usarlo sia per variabili locali sia per campi
  • final su tipi di riferimento non significa “contenuti immutabili”
  • Le costanti sono definite con static final
  • final è uno strumento per scrivere codice più sicuro e più chiaro

7. Valori iniziali, valori di default e errori comuni (recupero da trappole per principianti)

Finora hai imparato le dichiarazioni, i tipi, lo scope, var e final.
Nella pratica, però, ci sono molte situazioni in cui “capisco il concetto, ma continuo a ricevere errori.”

In questa sezione organizzeremo i punti di difficoltà più comuni per i principianti insieme alle relative cause.

7.1 Le variabili locali non ricevono valori di default

Prima di tutto, una regola molto importante:

Le variabili locali non ricevono valori di default automatici

Il codice seguente genera un errore di compilazione:

public void sample() {
    int x;
    System.out.println(x); // Error
}

Il motivo è semplice: Java non consente lo stato in cui “non sappiamo cosa c’è dentro x”.

Approccio corretto

public void sample() {
    int x = 0;
    System.out.println(x);
}

Per le variabili locali, segui rigorosamente la regola: inizializzale sempre tu stesso.

7.2 I campi ottengono automaticamente valori predefiniti

D’altra parte, i campi (variabili d’istanza e variabili statiche)
vengono assegnati automaticamente valori iniziali.

public class Sample {
    int count;
    boolean active;
    String name;
}

I valori predefiniti sono i seguenti:

  • int → 0
  • double → 0.0
  • boolean → false
  • Tipi di riferimento → null

Quindi il codice seguente non genera errori:

public class Sample {
    int count;

    public void print() {
        System.out.println(count); // 0
    }
}

Tuttavia, i progetti che si basano sui valori predefiniti non sono consigliati.
Rendono più difficile capire l’intento e possono facilmente diventare terreno fertile per bug.

7.3 Errori causati da null (NullPointerException)

Il valore predefinito per i tipi di riferimento è null.

String text;

Se chiami un metodo in questo stato, otterrai un errore di runtime:

System.out.println(text.length()); // NullPointerException

Questa è una delle eccezioni più comuni che i principianti incontrano.

Contromisure di base

  • Inizializza quando possibile
  • Considera la possibilità di null
  • Progetta per evitare l’uso non intenzionale di null
    String text = "";
    

Anche l’inizializzazione con una stringa vuota può prevenire molti incidenti.

7.4 Usare una variabile al di fuori del suo ambito

Il seguente è un altro errore comune:

if (true) {
    int value = 10;
}

System.out.println(value); // Error

Questo è un problema di riferimento fuori dall’ambito.

  • value è valido solo all’interno del blocco if
  • Fuori dal blocco, non esiste

Riconferma quella regola.

7.5 Confusione da variabili con lo stesso nome (Shadowing rivisitato)

public class Sample {
    int value = 10;

    public void test() {
        int value = 5;
        System.out.println(value);
    }
}

Questo codice stampa 5.

I principianti spesso pensano erroneamente che:

  • Verrà usato il valore del campo

Ma in realtà,
l’ambito interno ha la priorità.

Poiché lo shadowing causa confusione:

  • Usa nomi di variabili distinti in base ai ruoli

Tieni presente.

7.6 Errori di compilazione dovuti a incompatibilità di tipo

La seguente assegnazione non è consentita:

int number = 3.14; // Error

Questo perché:

  • doubleint non viene convertito automaticamente

Questa è la regola.

Approccio corretto (quando lo intendi)

int number = (int) 3.14; // 3

Tuttavia, fai attenzione che la parte decimale viene troncata.

7.7 Riepilogo della sezione

  • Le variabili locali devono essere inizializzate
  • I campi ottengono valori predefiniti, ma non fare troppo affidamento su di essi
  • null spesso causa errori di runtime
  • Non puoi usare le variabili al di fuori del loro ambito
  • Le incompatibilità di tipo sono prevenute con errori di compilazione

8. Riepilogo: Punti chiave da padroneggiare per primi per le variabili Java

In questo articolo, abbiamo organizzato l’argomento “variabili Java” passo dopo passo,
concentrandoci sui punti che i principianti trovano comunemente confusi.

Infine, riassumiamo i punti chiave
in una forma utile sia per l’apprendimento che per la programmazione reale.

8.1 Considera le variabili Java come un insieme di “Tipo, Nome e Valore”

Le variabili Java hanno sempre questi tre elementi:

  • Tipo : che tipo di valore contiene
  • Nome : cosa rappresenta il valore
  • Valore : i dati effettivi memorizzati
    int count = 10;
    

Questa singola riga contiene l’intera essenza delle variabili Java.

8.2 Distinguere chiaramente dichiarazione, assegnazione e inizializzazione

Una trappola comune per i principianti è confondere le differenze tra questi tre termini:

  • Dichiarazione: preparare l’uso di una variabile
  • Assegnazione: inserire un valore
  • Inizializzazione: dichiarare e assegnare allo stesso tempo

Specialmente per le variabili locali,
ricorda la regola: non puoi usarle se non sono inizializzate.

8.3 Essere consapevoli della differenza tra tipi primitivi e tipi di riferimento

I tipi Java sono ampiamente divisi in due categorie:

  • Tipi primitivi: gestiscono il valore stesso
  • Tipi di riferimento: gestiscono la posizione (riferimento) del valore

Tenere a mente questa differenza ti aiuta a comprendere naturalmente:

  • Copia del valore
  • Come si comportano array e oggetti
  • Cosa significa realmente final

8.4 Comprendere lo Scope Riduce Drasticamente gli Errori

Le variabili possono essere usate solo nel punto in cui sono dichiarate.

  • Variabili locali → valide solo all’interno dei blocchi
  • Campi → disponibili in tutta la classe
  • Variabili statiche → condivise in tutta la classe

Se ti capita di pensare “Non capisco perché non posso usarla,”
sospetta prima lo scope.

8.5 Usa var e final in Base allo Scopo

  • var → Usalo solo quando il tipo è chiaro e la leggibilità migliora
  • final → Usalo per esprimere chiaramente l’intento “questo valore non dovrebbe cambiare”

Entrambi sono comodi, ma fai attenzione a non trasformare “usarli” nell’obiettivo stesso.

8.6 Linee Guida per Principianti per Scrivere in Sicurezza

Durante la fase di apprendimento, le seguenti politiche riducono gli errori:

  • Inizializza le variabili quando le dichiari
  • Scrivi i tipi esplicitamente il più possibile
  • Usa nomi significativi
  • Se non sei sicuro, prova ad aggiungere final

Anche solo questo ti avvicina a un codice Java leggibile e sicuro.

8.7 Prossimi Argomenti da Imparare per una Comprensione più Profonda

Dopo aver compreso le variabili, è consigliato passare a:

  • Condizionali ( if / switch )
  • Cicli ( for / while )
  • Array e collezioni (List / Map)
  • Metodi e parametri
  • Fondamenti di programmazione orientata agli oggetti

Le variabili sono il fondamento di tutto il codice Java.

Comprendendole a fondo, il tuo apprendimento futuro diventa notevolmente più fluido.