Relates :
|
If this test case is compiled: import java.util.*; public class Test { void foo() { List<String> l = null; String first = null; try { first = l.get(0); } finally{ if (first != null) { System.out.println("finalizer"); } } } } the LNT generate by javac for method foo(), showed along with the code: void foo(); descriptor: ()V flags: (0x0000) Code: stack=2, locals=4, args_size=1 0: aconst_null 1: astore_1 2: aconst_null 3: astore_2 4: aload_1 5: iconst_0 6: invokeinterface #2, 2 // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object; 11: checkcast #3 // class java/lang/String 14: astore_2 15: aload_2 16: ifnull 45 19: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream; 22: ldc #5 // String finalizer 24: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 27: goto 45 30: astore_3 31: aload_2 32: ifnull 43 35: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream; 38: ldc #5 // String finalizer 40: invokevirtual #6 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 43: aload_3 44: athrow 45: return Exception table: from to target type 4 15 30 any LineNumberTable: line 5: 0 line 6: 2 line 8: 4 line 10: 15 line 11: 19 line 10: 30 line 11: 35 line 14: 45 should contain an entry pointing to bytecode instruction 43