javaseiten.de   |   Version 0.6
 

5.3. Klassen und Interfaces

Zur Definition einer Klasse bzw. eines Interfaces werden innerhalb des Jasmin-Headers die Direktiven .class und .interface verwendet.

 

Die Direktiven .class, .super und .implements

Eine Klassedeklaration durch einen Java-Quelltext kann wie folgt aufgebaut sein:

ClassModifiers class ClassName extends SuperClassName implements InterfaceName

Für die Umsetzung in Assemblersprache sind die Direktiven

Klassendeklaration:

.class <classmodifiers> <classname>
.super <superclassname>
.implements <interfacename>

verfügbar. Die Direktiven erwarten jeweils Namensbezeichnungen der Klasse, der Superklasse dieser Klasse und des Interfaces, das von der Klasse implementiert wird. Innerhalb der .class-Direktive können auch Klassen-Modifiaktoren, wie z.B. public, notiert werden. Die anschließende Gegenüberstellung zeigt eine Klassendeklaration innerhalb eines Java-Quelltextes und den zugehörigen Jasmin-Quelltext:

Java-Quelltext                   Jasmin-Quelltext

public class Test                .class public Test
    extends Test1                .super Test1
    implements Interface1        .implements Interface1

Soll eine Klasse mehrere Interfaces implementieren, kann die Direktive .implements mehrfach genutzt werden.

 

Die Direktive .interface

Wenn ein Interface durch einen Java-Quelltext erstellt werden soll, kann eine Deklaration der Schnittstelle wie folgt erfolgen:

InterfaceModifiers interface InterfaceName extends SuperInterfaceName

Für eine Umsetzung dieser Interface-Deklaration in Jasmin-Assemblersprache wird die Direktive .interface zur Verfügung gestellt:

Interfacedeklaration:

.interface <interfacemodifiers> <interfacename>
.super java/lang/Object
.implements <superinterfacename>

Die Interface-Deklaration auf Assemblerebene bildet folgende Gegebenheiten bzw. Festlegungen innerhalb der JVM-Spezifikation ab: Ein Interface-Typ ist ein spezieller Klassen-Typ (ein Interface wird ebenfalls durch eine Datei mit der Endung .class repräsentiert). Die Superklasse eines Interfaces ist definitionsgemäß java.lang.Object. Jedes Interface ist implizit abstract. Die Grundlage dieser Festlegungen resultiert aus der Struktur einer Klassendatei. Siehe dazu auch Tabelle 4.1. Ein Beispiel für eine Interface-Deklaration innerhalb eines Java-Quelltextes und nach Jasmin-Syntax zeigt das anschließende Beispiel:

Java-Quelltext                Jasmin-Quelltext

public interface Test         .interface public abstract Test
    extends Interface1        .super java/lang/Object
                              .implements Interface1

 

Die Direktiven .bytecode und .source

Der Header eines Jasmin-Quelltextes kann weiterhin die Direktiven .bytecode und .source enthalten. Zunächst soll die Erstere näher erläutert werden. Jede .class-Datei speichert intern die Version ihres Klassendateiformats. Eine Implementierung einer virtuelle Java-Maschine kann bestimmte Klassendateien nur dann unterstützen, wenn das Klassendateiformat innerhalb einer unteren und oberen Bergrenzung liegt. So können z.B. die JVM's der Java Development Kits 1.1.x Klassendateiformate im Bereich von 45.0 bis einschließlich 45.65535 abarbeiten. Das JDK 6 besitzt die interne Versionnummer (developer version number) 1.6 und unterstützt das Klassendateiformat 50.0. Die Versionsnummer einer .class-Datei setzt sich aus insgesamt vier Bytes zusammen (Minor-Versionsnummer m und Major-Vesionsnummer M), die am Anfang der Datei (5. bis 8. Byte) stehen. Aus diesen beiden Werten ergibt sich die Version des Klassendateiformats zu M.m . Die Version des Klassendateiformats, das durch Jasmin erzeugt werden soll, wird durch die Direktive .bytecode festgelegt.

.bytecode <M.m>

M: Major-Versionsnummer der Klassendatei.
m: Minor-Versionsnummer der Klassendatei.

Die Angabe .bytecode 50.0 im Jasmin-Quelltext füht dazu, dass die entsprechenden Bytes mit den hexadezimalen Werten 00 00 00 32 belegt werden, wobei sich m aus den beiden ersten Zahlenwerten zu 0 berechnet und M = 3*16 + 2 = 50 ist. Allgemein ist festgelegt, das mit k >= 2 gilt: Implementierungen der Java 2 Plattform können Versionen von Klassendateiformaten im Bereich von 45.0 bis einschließlich 44+k.0 unterstützen.

Die Direktive .source ist optional und kann genutzt werden, um den Inhalt des SourceFile-Attributs einer Klassendatei festzulegen. Das Attribut macht Angaben über die Quelldatei, von der die Klassendatei hervorgegangen ist (siehe dazu auch Tabelle 4.5).

.source <sourcefilename>

Wird die Direktive nicht genutzt wird das SourceFile-Attribut mit dem Namen der bei der Übersetzung verwendeten Jasmin-Quelldatei gesetzt (z.B. HelloWorld.j).

 

 

 

Diese Seite nutzt Google-Dienste - siehe dazu Datenschutz.

Copyright © 2006, 2007 Harald Roeder