Was sind anonyme Klassen?

Anonyme Klassen sind namenlose Klassen, die gleichzeitig definiert und initialisiert werden.

Sie werden mit dem new-Operator an der Stelle im Quelltext initialisiert, an der sie Verwendung finden. Somit stehen sie für gewöhnlich selbst an Stellen, an denen sonst ein Referenzwert erwartet würde.
Sie werden gerne dort verwendet wo on the fly eine einmalige Objektbildung benötigt wird. Dies ist beispielsweise in GUIs bei EventListenern oder einfachen Threads der Fall.
Anonyme Klassen erweitern existierende Klassen oder implementieren Interfaces ohne extends zu verwenden. Werden bei der Erzeugung Parameter übergeben, so muss die Superklasse den passenden Konstruktor besitzen. Die anonyme Klasse selbst deklariert keinen Konstuktor.

public class AnonymousClassBsp {

    public static void main(String[] args) {
        new Person("Meier") {
            void printName() {
                System.out.println("Mein Name ist: " + this.getName());
            }
        };
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
        printName();
    }

    void printName() {
        System.out.println(name);
    }

    String getName() {
        return name;
    }
}

Im Beispiel wird in der main-Methode eine anonyme Klasse vom Typ Person erzeugt. Dem Konstruktor wird ein String übergeben und in ihrem Körper die Methode printName() überschrieben. Sie gibt in der Superklasse den Wert der Variablen name auf der Konsole aus. In der überschriebenen Version der anonymen Klasse wird dieser String etwas erweitert und die Methode getName() der Superklasse aufgerufen.

Oft werden auch Interfaces in anonymen Klassen implementiert. Das gängigste Beispiel hierfür stellt sicherlich die Ereignisbehandlung durch das Interface ActionListener dar, mit dem z.B. das Eventhandling von Buttons realisiert wird.
Seit Java 8.0 wird dies zudem durch Lambda Ausdrücke noch erheblich übersichtlicher.