public class ExceptionExample3 {
public static void main(String[] args) {
MyExceptionExample3 obj = new MyExceptionExample3();
try {
obj.m2();
} catch (Exception e) {
System.out.println("main :" + e.getMessage());
}
System.out.println("main : resume here");
obj.m2(); // do not catch, terminate abnormally!
System.out.println("main : do not print this line ….");
}
}
class MyExceptionExample3 {
public void m1() {
System.out.println("m1 : print this line....");
// int x=5/0;
throw new RuntimeException("hello exception from m1()!");
// do not reach here!
}
public void m2() {
try {
m1();
} catch (Exception e) {
System.out.println("m2 :" + e.getMessage());
}
System.out.println("m2 : resume here");
m1(); // catch in main function
}
}
输出:
m1 : print this line....
m2 :hello exception from m1()!
m2 : resume here
m1 : print this line....
main :hello exception from m1()!
main : resume here
m1 : print this line....
m2 :hello exception from m1()!
m2 : resume here
m1 : print this line....
Exception in thread "main" java.lang.RuntimeException: hello exception
from m1()
这是课堂上关于例外的例子。我没有写这个程序,但是我在跟踪这个例外示例程序时遇到了一些麻烦。我甚至不确定为什么会抛出异常。如果有人可以请我完成这个程序,非常感谢你。
答案 0 :(得分:0)
因为你已经从你的类中获取了这个程序,所以我假设他们试图解释Exception对象在通过用户定义的处理程序(try和catch块)处理时的传播,以及何时将它们赋予默认的Exception Handler(JVM) )。 1)main方法是调用m2方法,而m2方法又调用由用户定义的处理程序处理的m1方法。 2)m2方法在这里调用m1方法,无论形成什么异常对象都给它下面的层次结构,它将捕获m1方法中引发的Exception对象。 3)主调用m2方法没有用户定义的处理程序,它将转到默认的异常处理程序,即jvm。 它们只是演示了Exception对象如何在堆栈层次结构中流动
答案 1 :(得分:0)
在你拥有的m1()
中抛出异常:
throw new RuntimeException("hello exception from m1()!");
然后通过调用堆栈传播回来,直到它们可以由适当的catch
块处理。程序通常通过识别捕获它们的方法然后打印消息来处理异常。
至于逻辑,它似乎只是一个学术或抽象的例子,因此抛出异常只是为了演示如何实现自定义异常和异常处理,以及异常如何影响程序的流程
程序注释写得很好,所以任何进一步的解释都有点多余,但是为了更全面地解释异常,请尝试Exceptions Lesson。