Skip to content

Instantly share code, notes, and snippets.

@MaksimDmitriev
Last active March 15, 2016 08:04
Show Gist options
  • Save MaksimDmitriev/24a20c10e057d4847303 to your computer and use it in GitHub Desktop.
Save MaksimDmitriev/24a20c10e057d4847303 to your computer and use it in GitHub Desktop.
If you call a method using reflection, and the method throws an exception, will the catch block you use to wrap the reflection, catch the exception thrown by the method you call?
package com.sample;
/**
* Created by Maksim on 3/15/2016.
*/
public class Foo {
public void bar() {
System.out.print("bar");
}
public void danger() {
System.out.print("lorem");
if (true) {
throw new RuntimeException("lorem error");
}
}
}
package com.sample;
/**
* Created by Maksim on 3/15/2016.
*/
public class Foo {
public void bar() {
System.out.println("bar");
}
public void danger() {
System.out.println("lorem");
new Thread(new Runnable() {
@Override
public void run() {
if (true) {
throw new RuntimeException("lorem error");
}
}
}).start();
}
}
package com.sample;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) {
useRefl();
}
static void useRefl()
{
try {
Class fooClass = Class.forName("com.sample.Foo");
Method bar = fooClass.getMethod("bar");
Object fooObject = fooClass.newInstance();
bar.invoke(fooObject);
Method danger = fooClass.getMethod("danger");
danger.invoke(fooObject);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
"C:\Program Files\Java\jdk1.8.0_65\bin\java" -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 15.0.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_65\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_65\jre\lib\rt.jar;F:\IntellijIdea-Workspace\Sample-Java\out\production\Sample-Java;F:\IntellijIdea-Workspace\Sample-Java\lib\junit-4.12.jar;F:\IntellijIdea-Workspace\Sample-Java\lib\hamcrest-core-1.3.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 15.0.2\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.sample.Main
barloremjava.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.sample.Main.useRefl(Main.java:22)
at com.sample.Main.main(Main.java:11)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.RuntimeException: lorem error
at com.sample.Foo.danger(Foo.java:16)
... 11 more
Process finished with exit code 0
Exception in thread "Thread-0" java.lang.RuntimeException: lorem error
at com.sample.Foo$1.run(Foo.java:19)
at java.lang.Thread.run(Unknown Source)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment