# virtual methods .method public onClick(Landroid/view/View;)V .locals 4 .parameter "v" .prologue .line 62 :try_start_0 const-string v3, "try 1" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_2 .line 64 :try_start_1 const-string v3, "try 2" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_1 .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_1 .line 66 :try_start_2 const-string v3, "try 3" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; .line 67 const-string v3, "continue3" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_2 .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_0 .line 71 :goto_0 :try_start_3 const-string v3, "continue2" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_3 .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_1 .line 75 :goto_1 :try_start_4 const-string v3, "continue1" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_4 .catch Ljava/lang/Exception; {:try_start_4 .. :try_end_4} :catch_2 .line 79 :goto_2 return-void .line 68 :catch_0 move-exception v2 .line 69 .local v2, e3:Ljava/lang/Exception; :try_start_5 const-string v3, "e3" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_5 .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_5} :catch_1 goto :goto_0 .line 72 .end local v2 #e3:Ljava/lang/Exception; :catch_1 move-exception v1 .line 73 .local v1, e2:Ljava/lang/Exception; :try_start_6 const-string v3, "e2" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; :try_end_6 .catch Ljava/lang/Exception; {:try_start_6 .. :try_end_6} :catch_2 goto :goto_1 .line 76 .end local v1 #e2:Ljava/lang/Exception; :catch_2 move-exception v0 .line 77 .local v0, e1:Ljava/lang/Exception; const-string v3, "e1" invoke-static {v3}, Ljava/lang/System;->clearProperty(Ljava/lang/String;)Ljava/lang/String; goto :goto_2 .end method
顺序分析: try { //try0 System.clearProperty("try 1"); } catch //catch_2 try { //try1 System.clearProperty("try 1"); } catch //catch_1 try { //try2 System.clearProperty("try 3"); System.clearProperty("continue3"); } catch //catch_0 //:goto 0 try { //try3 System.clearProperty("continue2"); } catch //catch_1 //:goto 1 try { //try4 System.clearProperty("continue1"); } catch //catch_2 //:goto_2 return-void //唯一出口,void类型 //:catch_0 Exception e3 { System.clearProperty("e3"); } //goto :goto_0 //:catch_1 Exception e2 { System.clearProperty("e2"); } //goto :goto_1 //:catch_2 Exception e1 { System.clearProperty("e1"); } //goto :goto_2 变形: try { //try1 System.clearProperty("try 1"); //:goto 1 try{ System.clearProperty("continue1"); //try4 } } catch(Exception e1) //catch_2合并 { System.clearProperty("e1"); } //goto :goto_2 try { //try0 System.clearProperty("try 2"); //:goto 0 try{ System.clearProperty("continue2"); //try3 } } catch(Exception e2) //catch_1合并 { System.clearProperty("e2"); } //goto :goto_1 try { //try2 System.clearProperty("try 3"); System.clearProperty("continue3"); } catch(Exception e3) { //catch_0 System.clearProperty("e3"); } //goto :goto_0 //:goto_2 return-void //唯一出口,void类型 处理goto,合并try try { System.clearProperty("try 1"); try { System.clearProperty("try 2"); try { System.clearProperty("try 3"); System.clearProperty("continue3"); } catch (Exception e3) { System.clearProperty("e3"); } System.clearProperty("continue2"); } catch (Exception e) { System.clearProperty("e2"); } System.clearProperty("continue1"); } catch (Exception e) { System.clearProperty("e1"); } goto小技巧:先处理小的,比如:goto0----goto1---goto2---......