对一个JAVA类的某一个方法进行反射,一共要检测多少个异常:
public class Test {
public int tw(int param) throws CoreyException {
if (param < 0) {
throw new CoreyException(-1, "negative parameter");
}
return 0;
}
public static void main(String[] args) {
try {
Class cls=Test.class;
Object obj=cls.newInstance();
Method mth=cls.getMethod("tw", int.class);
Object result=mth.invoke(obj, -1);
System.out.println(result);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
Throwable ne=e.getCause();
System.out.println(ne instanceof CoreyException);
System.out.println(ne.getMessage());
}
}
}
SecurityException:由安全管理器抛出的异常,指示存在安全侵犯。 不是所有类都能够反射。
IllegalArgumentException:参数非法,比如上面的参数传为“hello world”
InstantiationException:系统需要用无参构造函数实例化一个对象,而类没有定义公有无参构造函数。
IllegalAccessException:访问非法异常,比如当前类没有权限调用一个类的私有方法;
NoSuchMethodException:没有getMethod的方法。
InvocationTargetException:这个异常,是指我们反射调用了tw方法,而tw本身抛出了一场CoreyException,则同意抛出此异常,
我们可以利用Throwable ne=e.getCause();获取原生态的异常。