4.13.3 | Interne Realisierung innerer Klassen |
Die inneren Klassen wurden ohne Erweiterungen am Befehlssatz oder an der Struktur des vom Compiler erzeugten Bytecodes implementiert. Die Virtual Machine kennt nach wie vor nur Top-Level-Klassen. Auf diese Weise wurde Abwärtskompatibilität zu älteren Virtual Machines gewährleistet. Programme, die innere Klassen benutzen, erfordern zwar einen Compiler, der mindestens auf dem Stand von Java 1.1 ist, die erzeugten Programme laufen aber auch auf Interpretern der Version 1.0.
Die technische Realisierung der inneren Klassen erfolgt durch den Compiler, der alle inneren Klassen mit einem in der Spezifikation festgelegten Verfahren in Top-Level-Klassen umwandelt. Der Name der Klassendatei einer geschachtelten Klasse ergibt sich aus der Verkettung ihres Namens mit den Namen der umschließenden Klassen, die jeweils mit einem Dollarzeichen ($) voneinander getrennt sind. Der Bytecode einer inneren Klasse B, die in der Klasse A definiert ist, wird in der Datei A$B.class gespeichert.
Bei anonymen Klassen wird genauso verfahren, nur dass hier Nummern für die Klassennamen verwendet werden. Der Bytecode der ersten anonymen Klasse innerhalb einer Klasse A wird also in der Datei A$1.class stehen.