Variabili locali: vengono dichiarate ed esistono solo all'interno del corpo di un metodo o di un blocco, non vengono inizializzate automaticamente. L'uso di una variabile locale non inizializzata porta a un errore di compilazione.
Variabili di istanza (campi non statici): appartengono a ogni oggetto separatamente e vengono inizializzate al momento della creazione dell'istanza dell'oggetto.
Variabili statiche (campi statici): sono comuni a tutte le istanze della classe, esistono in un'unica copia per l'intera classe. La loro modifica in un oggetto è visibile in tutti gli altri oggetti di quella classe.
public class Example { private int instanceVar; // variabile di istanza private static int staticVar; // variabile statica public void foo() { int localVar = 0; // variabile locale } }
Le variabili statiche possono essere private e come sono visibili tra diverse istanze della classe?
Risposta: Sì, le variabili statiche possono essere private. La loro modifica si riflette per tutte le istanze della classe, poiché appartengono alla classe stessa e non all'oggetto.
public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }
La creazione di più istanze di MyClass aumenterà lo stesso contatore.
Storia
In un'applicazione enterprise, uno sviluppatore ha erroneamente inserito lo stato dell'utente in un campo statico. Questo ha portato a situazioni in cui gli utenti "vedevano" i dati degli altri in un ambiente multiutente.
Storia
Durante la scrittura di un'applicazione multithread, una variabile di istanza è stata utilizzata all'interno di un metodo statico senza adeguata sincronizzazione. Questo ha generato condizioni di gara e risultati inaspettati.
Storia
Uno sviluppatore ha deciso di utilizzare una variabile locale invece di un campo di classe per memorizzare un risultato intermedio. La variabile veniva distrutta al termine del metodo e il programma restituiva sempre null, il che non è stato rilevato immediatamente durante il testing.