Die Variablen einer Klasse (Instanzvariablen, Klassenvariablen) werden als
Felder der Klasse bezeichnet. Für die Deklaration eines Feldes ist die
Felddeklaration:
.field <fieldmodifiers> <fieldname> <fielddescriptor>
[signature <fieldsignature>] [= <value>]
.field <fieldmodifiers> <fieldname> <fielddescriptor>
[signature <fieldsignature>] [= <value>]
<direktives>
.end field Die erste Syntax zur Felddeklaration muss in einer einzigen Zeile im
Assemblerquelltext notiert werden. Ein Feld kann z.B. innerhalb eines
Jasmin-Quelltextes als "deprecated" markiert werden. Hierzu steht eine geeignete
Direktive zur Verfügung. Neben der genannten Direktive können auch noch weitere
Direktiven innerhalb von /* FieldExample.java */ import java.util.*; public class FieldExample { int i1; float[] f; static String s; int i2 = 3; final int i3 = 4; private static final int i4 = 5; Vector<Integer> v = new Vector<Integer>(); } Das Listing Java-Quelltext Jasmin-Quelltext int i1; .field i1 I float[] f; .field f [F static String s; .field static s Ljava/lang/String; private static final int i4 = 5; .field private static final i4 I = 5 Die Wertzuweisungen für die Felder Java-Quelltext Jasmin-Quelltext int i2 = 3; .field i2 I .method public <init>()V ... aload_0 iconst_3 putfield FieldExample/i2 I ... .end method final int i3 = 4; .field final i3 I = 4 .method public <init>()V ... aload_0 iconst_4 putfield FieldExample/i3 I ... .end method Vector<Integer> v = .field v Ljava/util/Vector; signature new Vector<Integer>(); "Ljava/util/Vector<Ljava/lang/Integer;>;" .method public <init>()V ... aload_0 new java/util/Vector dup invokespecial java/util/Vector/<init>()V putfield FieldExample/v Ljava/util/Vector; ... .end method Das nachfolgende Jasmin-Listing enthält das vollständige Programm und ist
eine Umsetzung von Listing 5.8. ; FieldExample.j .bytecode 50.0 .class public FieldExample .super java/lang/Object .field i1 I .field f [F .field static s Ljava/lang/String; .field i2 I .field final i3 I = 4 .field private static final i4 I = 5 .field v Ljava/util/Vector; signature "Ljava/util/Vector<Ljava/lang/Integer;>;" .method public <init>()V .limit stack 3 .limit locals 1 aload_0 invokespecial java/lang/Object/<init>()V aload_0 iconst_3 putfield FieldExample/i2 I aload_0 iconst_4 putfield FieldExample/i3 I aload_0 new java/util/Vector dup invokespecial java/util/Vector/<init>()V putfield FieldExample/v Ljava/util/Vector; return .end method Für die Angabe der Feldsignatur kann auch auf die Direktive .field v Ljava/util/Vector; signature "Ljava/util/Vector<Ljava/lang/Integer;>;" .field v Ljava/util/Vector; .signature "Ljava/util/Vector<Ljava/lang/Integer;>;" .end field |
|