1 2 method A.<init>():void 3 { 4 ............................. begin block 1 ............................. 5 .src "tryCatch.java" 6 .line 2 7 .prologue_end 8 .line 2 9 0| move-object v0, v2 10 .local v0, "this", A 11 1| move-object v1, v0 12 2| invoke-direct {v1}, java.lang.Throwable.<init>():void 13 5| return-void 14 .............................. end block 1 .............................. 15 } 16 17 method B.<init>():void 18 { 19 ............................. begin block 1 ............................. 20 .src "tryCatch.java" 21 .line 6 22 .prologue_end 23 .line 6 24 0| move-object v0, v2 25 .local v0, "this", B 26 1| move-object v1, v0 27 2| invoke-direct {v1}, java.lang.Throwable.<init>():void 28 5| return-void 29 .............................. end block 1 .............................. 30 } 31 32 method TryCatch.<init>():void 33 { 34 ............................. begin block 1 ............................. 35 .src "tryCatch.java" 36 .line 10 37 .prologue_end 38 .line 10 39 0| move-object v0, v2 40 .local v0, "this", TryCatch 41 1| move-object v1, v0 42 2| invoke-direct {v1}, java.lang.Object.<init>():void 43 5| return-void 44 .............................. end block 1 .............................. 45 } 46 47 method TryCatch.foo(int):int 48 { 49 ............................. begin block 1 ............................. 50 .params "?" 51 .src "tryCatch.java" 52 .line 27 53 .prologue_end 54 .line 27 55 0| move v0, v4 56 .local v0, "x", int 57 1| move v1, v0 58 2| if-lez v1, Label_4 59 .............................. end block 1 .............................. 60 ............................. begin block 2 ............................. 61 .line 28 62 4| move v1, v0 63 5| packed-switch v1, Label_5 64 .............................. end block 2 .............................. 65 ............................. begin block 3 ............................. 66 .line 31 67 8| const/4 v1, #+1 (0x00000001 | 1.40130e-45) 68 9| move v0, v1 69 .............................. end block 3 .............................. 70 ............................. begin block 4 ............................. 71 Label_1: 72 .line 34 73 .end_local v0 74 10| return v0 75 .............................. end block 4 .............................. 76 ............................. begin block 5 ............................. 77 Label_2: 78 .line 29 79 .restart_local v0 80 11| new-instance v1, A 81 13| move-object v3, v1 82 14| move-object v1, v3 83 15| move-object v2, v3 84 16| invoke-direct {v2}, A.<init>():void 85 19| throw v1 86 .............................. end block 5 .............................. 87 ............................. begin block 6 ............................. 88 Label_3: 89 .line 30 90 20| new-instance v1, B 91 22| move-object v3, v1 92 23| move-object v1, v3 93 24| move-object v2, v3 94 25| invoke-direct {v2}, B.<init>():void 95 28| throw v1 96 .............................. end block 6 .............................. 97 ............................. begin block 7 ............................. 98 Label_4: 99 .line 34 100 29| const/4 v1, #+0 (0x00000000 | 0.00000) 101 30| move v0, v1 102 31| goto Label_1 103 .............................. end block 7 .............................. 104 Label_5: <aligned> 105 .line 28 106 32| packed-switch-payload 107 1: Label_2 108 2: Label_3 109 } 110 111 method TryCatch.main(java.lang.String[]):void 112 { 113 ............................. begin block 1 ............................. 114 .params "?" 115 .src "tryCatch.java" 116 .line 15 117 .prologue_end 118 .line 15 119 0| move-object v0, v6 120 .local v0, "args", java.lang.String[] 121 1| const/4 v3, #+0 (0x00000000 | 0.00000) 122 .............................. end block 1 .............................. 123 .try_begin_1 124 ............................. begin block 2 ............................. 125 2| invoke-static {v3}, TryCatch.foo(int):int 126 .............................. end block 2 .............................. 127 .try_end_1 128 catch(B) : Label_3 129 catch(A) : Label_4 130 catch(...) : Label_5 131 ............................. begin block 3 ............................. 132 5| move-result v3 133 .............................. end block 3 .............................. 134 ............................. begin block 4 ............................. 135 Label_1: 136 .line 18 137 .line 22 138 6| sget-object v3, java.lang.System.out 139 8| const-string v4, "finally\n" 140 10| const/4 v5, #+0 (0x00000000 | 0.00000) 141 11| new-array v5, v5, java.lang.Object[] 142 13| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 143 16| move-result-object v3 144 .............................. end block 4 .............................. 145 ............................. begin block 5 ............................. 146 Label_2: 147 .line 23 148 .line 24 149 17| return-void 150 .............................. end block 5 .............................. 151 ............................. begin block 6 ............................. 152 Label_3: 153 .line 16 154 18| move-exception v3 155 19| move-object v1, v3 156 .............................. end block 6 .............................. 157 .try_begin_2 158 ............................. begin block 7 ............................. 159 .line 17 160 .local v1, "ex", B 161 20| sget-object v3, java.lang.System.out 162 22| const-string v4, "catch: B\n" 163 24| const/4 v5, #+0 (0x00000000 | 0.00000) 164 25| new-array v5, v5, java.lang.Object[] 165 27| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 166 .............................. end block 7 .............................. 167 .try_end_2 168 catch(A) : Label_4 169 catch(...) : Label_5 170 ............................. begin block 8 ............................. 171 30| move-result-object v3 172 31| goto Label_1 173 .............................. end block 8 .............................. 174 ............................. begin block 9 ............................. 175 Label_4: 176 .line 19 177 .end_local v1 178 32| move-exception v3 179 33| move-object v1, v3 180 .............................. end block 9 .............................. 181 .try_begin_3 182 ............................. begin block 10 ............................. 183 .line 20 184 .local v1, "ex", A 185 34| sget-object v3, java.lang.System.out 186 36| const-string v4, "catch: A\n" 187 38| const/4 v5, #+0 (0x00000000 | 0.00000) 188 39| new-array v5, v5, java.lang.Object[] 189 41| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 190 .............................. end block 10 .............................. 191 .try_end_3 192 catch(...) : Label_5 193 ............................. begin block 11 ............................. 194 44| move-result-object v3 195 .line 22 196 45| sget-object v3, java.lang.System.out 197 47| const-string v4, "finally\n" 198 49| const/4 v5, #+0 (0x00000000 | 0.00000) 199 50| new-array v5, v5, java.lang.Object[] 200 52| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 201 55| move-result-object v3 202 .line 23 203 56| goto Label_2 204 .............................. end block 11 .............................. 205 ............................. begin block 12 ............................. 206 Label_5: 207 .line 22 208 .end_local v1 209 57| move-exception v3 210 58| move-object v2, v3 211 59| sget-object v3, java.lang.System.out 212 61| const-string v4, "finally\n" 213 63| const/4 v5, #+0 (0x00000000 | 0.00000) 214 64| new-array v5, v5, java.lang.Object[] 215 66| invoke-virtual {v3,v4,v5}, java.io.PrintStream.printf(java.lang.String, java.lang.Object[]):java.io.PrintStream 216 69| move-result-object v3 217 70| move-object v3, v2 218 71| throw v3 219 .............................. end block 12 .............................. 220 } 221