Was ist der Unterschied zwischen einer lokalen und einer globalen Variable?

Deklaration:

Globale Variablen werden außerhalb von Methoden deklariert. Die Deklaration einer globalen Variable kann vor oder nach ihrer Verwendung im Code stehen.

Lokale Variablen werden innerhalb einer Methode deklariert. Die Deklaration einer lokalen Variable muss vor ihrer Verwendung im Code stattfinden.

Sichtbarkeit:

Ein wesentlicher Unterschied zwischen globalen und lokalen Variablen ist ihre Sichtbarkeit. Siehe Scope in unserer FAQ.

Lebensdauer:

Eine lokale Variable existiert nur in dem Block, in dem sie deklariert wird. Eine globale Variable hat die gleiche Lebensdauer wie das zugehörige Objekt.

Überschattung:

Deklariert man in einem Block ein lokale Variable, die namensgleich mit einer globalen Variable ist, wird in dem Block in dem die Variable deklariert wurde, die globale Variable von der lokalen Variable überdeckt. In einem solchen Kontext kann mit this auf die verschattete Variable zugegriffen werden.

public class Test {
    int n = 1;

    void foo() {
        int n = 3;
        System.out.println("lokal: " + n);
        System.out.println("global: " + this.n);
    }

    public static void main(String[] args) {
        Test o = new Test();
        System.out.println(o.n);
        o.foo();
    }
}

In Zeile 2 wird die globale Variable n deklariert und initialisiert.
In Zeile 5 wird die lokale Variable n deklariert und initialisiert. Die globale Variable n wird durch die lokale Variable überschattet.
In Zeile 6 wird der Wert der lokalen Variable ausgegeben.
In Zeile 7 wird mit this auf die globale Variable n zugegriffen.
In Zeile 12 wird der Wert der globalen Variable ausgegeben.
In Zeile 13 wird die Methode foo() aufgerufen und der Wert der lokalen und globalen Variable ausgegeben.