Duplicate :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
If this code is compiled: import java.io.IOException; public class FunWithMultiCatch { public static void main(String[] args) { Runnable r = () -> { try { Object o = null; o.getClass(); throw new IOException(); } catch(IOException | IllegalArgumentException e) { System.out.println("KO !"); } catch(RuntimeException e) { System.out.println("OK !"); } }; r.run(); } } javac generates this code: private static void lambda$main$0(); descriptor: ()V flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC Code: stack=2, locals=1, args_size=0 0: aconst_null 1: astore_0 2: aload_0 3: invokevirtual #4 // Method java/lang/Object.getClass:()Ljava/lang/Class; 6: pop 7: new #5 // class java/io/IOException 10: dup 11: invokespecial #6 // Method java/io/IOException."<init>":()V 14: athrow 15: astore_0 16: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream; 19: ldc #9 // String KO ! 21: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 24: goto 36 27: astore_0 28: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream; 31: ldc #12 // String OK ! 33: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 36: return Exception table: from to target type 0 15 15 Class java/lang/Exception <----- this will capture all exceptions. 0 15 27 Class java/lang/RuntimeException if the original code is modified to: import java.io.IOException; class FunWithMultiCatch { public static void main(String[] args) { try { Object o = null; o.getClass(); throw new IOException(); } catch(IOException | IllegalArgumentException e) { System.out.println("KO !"); } catch(RuntimeException e) { System.out.println("OK !"); } } } then we obtain this exception table: Exception table: from to target type 0 15 15 Class java/io/IOException 0 15 15 Class java/lang/IllegalArgumentException 0 15 27 Class java/lang/RuntimeException reported in lambda-dev: http://mail.openjdk.java.net/pipermail/lambda-dev/2014-March/011940.html
|