Lade einen
Mit Hilfe von arrayref und index
wird ein Beispiel: String[] s = {"Hallo", "Java"}; 0: iconst_2
1: anewarray #2; //class java/lang/String
4: dup
5: iconst_0
6: ldc #3; //String Hallo
8: aastore
9: dup
10: iconst_1
11: ldc #4; //String Java
13: aastore
14: astore_1
String s0 = s[0]; 15: aload_1
16: iconst_0
17: aaload
18: astore_2 Mit
Speichere einen
Auf dem Operandenstapel befinden sich, vor der Ausführung des Befehls, die
Referenz auf das Array, der Index des Elements im Array und der zu speichernde
Lege die vordefinierte Konstante Beispiel: Object obj = null; 0: aconst_null
1: astore_1
Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel.
Der Eintrag objectref im Array bei diesem Index muss
vom Typ Beispiel: public class Test {
public static void main(String[] args) {
int i = args.length;; 0: aload_0
1: arraylength
2: istore_1
String s1 = "Ha"; 3: ldc #2; //String Ha
5: astore_2
String s2 = "ll"; 6: ldc #3; //String ll
8: astore_3
String s3 = "o!"; 9: ldc #4; //String o!
11: astore 4
String s4 = s1 + s2 + s3; 13: new #5; //class
java/lang/StringBuilder
16: dup
17: invokespecial #6; //Method
java/lang/StringBuilder.
"<init>":()V
20: aload_2
21: invokevirtual #7; //Method
java/lang/StringBuilder.
append:(Ljava/lang/
String;)Ljava/lang/
StringBuilder;
24: aload_3
25: invokevirtual #7;
28: aload 4
30: invokevirtual #7;
33: invokevirtual #8; //Method
java/lang/StringBuilder.
toString:()Ljava/lang/
String;
36: astore 5
}
} Das Laden der Objektreferenzen aus dem Array der lokalen Variablen übernehmen
zunächst die mit einem Byte codierten JVM-Befehle
Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel. Dabei steht 0 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Der Eintrag im Array bei Index 0 muss vom Typ
Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel. Dabei steht 1 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Der Eintrag im Array bei Index 1 muss vom Typ
Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel. Dabei steht 2 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Der Eintrag im Array bei Index 2 muss vom Typ
Lade eine Objektreferenz aus dem Array der lokalen Variablen auf den Operandenstapel. Dabei steht 3 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Der Eintrag im Array bei Index 3 muss vom Typ
Erzeuge ein neues Array (für Referenztypen).
Mit Hilfe der vorzeichenlosen Bytes indexbyte1 und
indexbyte2 wird ein Index im (Laufzeit-)Konstantenpool der
aktuellen Klasse berechnet: (indexbyte1 << 8) |
indexbyte2. Mit diesem Index kann eine entsprechende
Referenz auf eine Klasse, ein Array oder ein Interface erhalten werden.
Der ermittelte Typ legt den Typ der Elemente des zu erzeugenden Arrays fest.
Für das generierte Array wird Speicherplatz vom Heap bereitgestellt und jedes
Element des Arrays wird mit der leeren Referenz Beispiel: Im Beispiel wird ein Integer[] i = new Integer[3]; 0: iconst_3
1: anewarray #2;
//class java/lang/Integer
4: astore_1
i[0] = new Integer(4); 5: aload_1
6: iconst_0
7: new #2; //class java/lang/Integer
10: dup
11: iconst_4
12: invokespecial #3; //Method
java/lang/Integer."<init>":(I)V
15: aastore
Gebe eine Objektreferenz vom Typ
Der Rückgabewert objectref wird vom Stapel genommen und an den Aufrufer der Methode zurückgegeben, indem dieser auf den Operandenstapel des Methodenaufrufers gelegt wird. Beispiel: public class Test {
public static String method1() { public static String method1();
Code:
String a = "Hallo!"; 0: ldc #2; //String Hallo!
2: astore_0
return a; 3: aload_0
} 4: areturn
public static void main(String[] args) {
String b = method1();
}
}
Ermittle die Länge eines Arrays (Anzahl der Array-Elemente).
Beispiel: int[] i = new int[3]; 0: iconst_3
1: newarray int
3: astore_1
int a = i.length; 4: aload_1
5: arraylength
6: istore_2
Speichere eine Objektreferenz bzw. eine Rücksprungadresse in das Array der lokalen Variablen.
Die Objektreferenz bzw. die Rücksprungadresse wird vom Stapel genommen und
in das Array der lokalen Variablen geschrieben. Die Speicherung einer
Rücksprungadresse mit
Speichere eine Objektreferenz bzw. eine Rücksprungadresse in das Array der lokalen Variablen. Dabei steht 0 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Die Objektreferenz bzw. die Rücksprungadresse wird vom Stapel genommen und
in das Array der lokalen Variablen geschrieben (bei Index 0). Bei
Speichere eine Objektreferenz bzw. eine Rücksprungadresse in das Array der lokalen Variablen. Dabei steht 1 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Die Objektreferenz bzw. die Rücksprungadresse wird vom Stapel genommen und
in das Array der lokalen Variablen geschrieben (bei Index 1). Bei
Speichere eine Objektreferenz bzw. eine Rücksprungadresse in das Array der lokalen Variablen. Dabei steht 2 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Die Objektreferenz bzw. die Rücksprungadresse wird vom Stapel genommen und
in das Array der lokalen Variablen geschrieben (bei Index 2). Bei
Speichere eine Objektreferenz bzw. eine Rücksprungadresse in das Array der lokalen Variablen. Dabei steht 3 für einen Index im Array der lokalen Variablen des zugehörigen Methoden-Frames.
Die Objektreferenz bzw. die Rücksprungadresse wird vom Stapel genommen und
in das Array der lokalen Variablen geschrieben (bei Index 3). Bei
Löse eine Ausnahme (Exception) oder einen Fehler (Error) aus.
Nachdem eine Ausnahme ausgelöst wurde, wird mit Hilfe von
objectref nach einem Programmabschnitt gesucht (Exception
Handler), der eine Behandlung dieses Fehlers übernimmt (Stichwort:
Beispiel: public class Test {
public static void public static void
main(String[] args) { main(java.lang.String[]);
Code:
int n = -1; 0: iconst_m1
1: istore_1
if (n < 0) { 2: iload_1
3: ifge 14
throw new ArithmeticException(); 6: new #2; //class java/lang/
} ArithmeticException
9: dup
10: invokespecial #3; //Method
java/lang/ArithmeticException.
"<init>":()V
13: athrow
} 14: return
} Mit Hilfe von Da der Wert der Variablen Exception in thread "main" java.lang.ArithmeticException at Test.main(Test.java:5) Process java exited with code 1 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||