关于Java异常:Java异常——为什么会被捕获?

java exception - why does it catch?

我已经开始学习Java中的异常,但是我不知道为什么这个代码的输出是:

1
2
Throw SimpleException from f()
Cought it!

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    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)创建名为sed的新InheritingExceptions对象

2)使用try-catch块包装sed.f()方法。catch块捕获在try内引发的任何simpleException。

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

  • system.out.println("throw simpleexception from f()");--这将打印到控制台"throw simpleexception from f()"
  • 引发新的simpleException();

4)由于f()方法引发了simpleException,所以您的try-catch块捕获了它。当被抓到时,它会打印出来,以控制台"打开它!"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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!");
        }
    }
}

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

因为f()有打印"throw simpleException from f()",所以您的第一个输出行就是这个。另外,f()正在抛出simpleException(),当从你使用try-catch blockmain()方法调用f()时,这个块将捕获f()方法抛出的异常,并在内部捕获代码。catch块将被执行此执行将打印第二条语句"cought it!"


看,当你在主管道里做这个的时候:

1
sed.f();

您正在调用该函数,在该函数f()中,您正在打印"throw simpleexception from f()"并引发异常。在主系统中,你会捕捉到这个异常并打印"cought it!"