【问题标题】:Java Exception Program TracingJava 异常程序跟踪
【发布时间】:2015-10-24 17:59:26
【问题描述】:
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() 

这是在课堂上给出的一个关于异常的例子。我没有编写这个程序,但是我在跟踪这个异常example 程序时遇到了一些麻烦。我什至不确定为什么会抛出异常。如果有人可以请指导我完成这个程序,非常感谢。

【问题讨论】:

  • 自己抛出异常并询问它们抛出的原因并不是一件好事。
  • throw new RuntimeException("hello exception from m1()!");这是你程序中的罪魁祸首。
  • 这总是会从 m1 抛出异常,您可能需要添加一个条件,说明何时应该抛出异常
  • 对不起,我应该更清楚。这是一个异常的课堂示例。我只是在跟踪程序和理解为什么需要异常/为什么抛出异常时遇到了麻烦。

标签: java exception


【解决方案1】:

因为你已经从你的类中获取了这个程序,我假设他们试图解释异常对象在通过用户定义的处理程序(try 和 catch 块)处理时以及当它们被赋予默认异常处理程序(JVM)时的传播)。 1) main 方法是调用 m2 方法,然后调用 m1 方法,该方法由用户定义的处理程序处理。 2) 在这里调用 m1 方法的 m2 方法将形成的任何异常对象都赋予其下面的层次结构,该层次结构将捕获 m1 方法中引发的异常对象。 3) 在没有用户定义的处理程序的情况下主调用 m2 方法,该处理程序将转到默认的异常处理程序,即 jvm。 他们只是在演示 Exception 对象如何在堆栈层次结构中流动

【讨论】:

    【解决方案2】:

    在您拥有的m1() 中抛出异常:

    throw new RuntimeException("hello exception from m1()!");
    

    然后通过调用堆栈传播回来,直到它们可以被适当的catch 块处理。程序通常通过识别哪个方法捕获它们然后打印消息来处理异常。

    至于逻辑,这似乎只是一个学术或抽象的例子,所以抛出异常只是为了演示如何实现自定义异常和异常处理,以及异常如何影响程序的流程

    程序 cmets 写得体面,所以任何进一步的解释都感觉有点多余,但对于一般的异常更完整的解释,请尝试Exceptions Lesson

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 2013-09-13
      • 2011-01-05
      相关资源
      最近更新 更多