java异常-为什么会捕获?

时间:2018-12-18 20:27:01

标签: java exception

我已经开始研究Java中的异常,但是我不明白为什么这段代码的输出是:

Throw SimpleException from f()
Cought it!

代码是这样的:

    class SimpleException extends Exception {}

    public class InheritingExceptions {
        public void f() throws SimpleException{
            System.out.println("Throw SimpleException from f()");
            throw new SimpleException();

        }

        public static void main(String[] args) {
            InheritingExceptions sed = new InheritingExceptions();
            try {
                sed.f();
            } catch (SimpleException e) {
                System.out.println("Cought it!");
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

您的代码在做什么:

1)创建一个名为sed的新InheritingExceptions对象。

2)用try-catch块包装sed.f()方法。 catch块正在捕获try {}

中引发的任何SimpleException。

3)sed调用方法f()。 f()正在执行以下操作:

  • System.out.println(“从f()抛出SimpleException”); -这将打印到控制台“从f()抛出SimpleException”
  • 抛出新的SimpleException();

4)由于f()方法引发了SimpleException,因此您的try-catch块将其捕获。当被捕获时,它会打印到控制台“ Cought it!”。

class SimpleException extends Exception {}

public class InheritingExceptions {
    public void f() throws SimpleException{
        System.out.println("Throw SimpleException from f()");
        throw new SimpleException();

    }

    public static void main(String[] args) {
        InheritingExceptions sed = new InheritingExceptions();
        try {
            sed.f();
        } catch (SimpleException e) {
            System.out.println("Cought it!");
        }
    }
}

答案 1 :(得分:0)

看,当您在main内部进行此操作时:

sed.f();

您正在调用该函数,并且在该函数f()中,您正在打印“从f()抛出SimpleException”并抛出异常。在main内部,您正在捕获该异常并打印“ Cought it!”。

答案 2 :(得分:0)

因为在main()方法中创建了InheritingExceptions类的对象 并使用此对象调用InheritingExceptions类的f()方法。

f()已打印“从f()抛出SimpleException ”,因此您的第一条输出行将是此行。 同样,f()抛出SimpleException(),同时从您使用过f()的{​​{1}}方法调用main()时,此块将捕获try-catch block方法和代码抛出的异常内 catch块将被执行,该执行将打印您的第二条语句“ 已购买!”