java吧 关注:1,269,957贴子:12,777,645
  • 6回复贴,共1

请教个问题,高手请进

只看楼主收藏回复

class MyException extends Exception {
String msg;
public MyException(String msg) {
this.msg = msg;
}
public void printMsg() {
System.out.println("msg = " + msg);
}
}
class Thrower {
public void f() throws MyException {
throw new MyException("Inside f()");
}
public void g() throws MyException {
throw new MyException("Inside g()");
}
}
public class E08_ExceptionSpecification {
public static void main(String args[]) {
Thrower t = new Thrower();
try {
t.f();
t.g();
} catch(MyException e) {
e.printMsg();
}
}
}
最后的运行结果为:msg = Inside f()。想问一下,为什么同时调用f()、g(),抛出两个异常,却只捕获第一个?结果为什么不能是msg = Inside g()?


IP属地:河北1楼2017-02-12 11:40回复
    第一个都异常了第二个不执行了


    IP属地:河北来自Android客户端3楼2017-02-12 12:12
    收起回复
      2025-07-19 03:15:45
      广告
      你别写在同一个try 里面因为写在同一个里面 前面的一场被捕获之后 程序直接运行try 外面的第一条语句 意思是你在try 里面一旦捕获一个一异常 那么那么程序会直接跳到try 外面执行下面的代码


      IP属地:山东来自iPhone客户端4楼2017-02-12 12:20
      收起回复
        你也可以写一个异常链来同时显示两个异常 但他表示的是 一个是由另一个异常引起的 控制台会显示两个异常信息 但会用causeby 来说明两者的关系


        IP属地:山东来自iPhone客户端6楼2017-02-12 12:25
        收起回复