public class TestException {
public static void main(String[] args) throws MyException {
try {
int i = 2/0;

} catch(ArithmeticException e) {
e.printStackTrace();
} finally {
System.out.println("Always run");
}
try {
int[] a = {1,2,3};
int b = a[4];
} catch(MyException e) {
e.printStackTrace();
}
}
}class MyException extends Exception {
public MyException(){}
public MyException(Throwable cause) {
super(cause);
}
public MyException (String message) {
super(message);
}
public MyException(String message, Throwable cause) {
super(message,cause);
}
}请问为什么我自己定义的MyException类不能使用呢,无法获取堆栈异常信息,求助大神,谢谢

解决方案 »

  1.   

    我觉得是异常的捕获就是就近原则的,也就是说,先执行了try-catch的
      

  2.   

    我也是新手,感觉1楼的回答比较对,try-catch是先执行的
      

  3.   

    你自己定义了一个MyException类.但是编写的代码中并没有抛出你定义异常的可能性啊.
    第一个try模块会捕获到异常是因为2/0有可能抛出ArithmeticException异常.这里注意是有可能抛出,只有在运行时候有会判定是否抛出.
    第二个try模块有可能是抛出一个越界的异常,但是并不是你的MyException.
    自定义异常一般情况是比如说项目需要,比如需要在项目中抛出更加针对性的异常.而且对于Exception的子类必须在代码中显式的添加捕获处理,要不是过不了编译的.而对于数组越界/除数为零这些异常都是RuntimeException.所以一般不需要捕获,在运行时候自动检测.
      

  4.   

    自定义的异常需要在try块中throw
      

  5.   

    try-catch是先执行的