Java异常体系-Throwable、Error、Exception

1. 异常体系

   Throwable 类是java语言中所有Error类与Exception类的超类(superclass)。除RuntimeException类和Error类及它们的子类之外,Throwable类及其子类称为检查异常(checked exception)。

   RuntimeException类和Error类及它们的子类,被称为非检查异常(unchecked exception)。当JVM产生并抛出Error异常时,指示系统出现了严重的问题,而一个合理的应用程序都不应该捕获该异常,应该不catch,或者catch后抛出。

  Java异常体系继承图如下,

2.异常示例

2.1 非检查异常(运行时异常)NullpointException

    @Test
    void nullPointExceptionTest(){
        Staff staff = null;
        staff.getAge();
    }

执行结果


java.lang.NullPointerException
    at ...


2.2 可检查异常 ClassNotFoundException

    @Test
    void classNotFoundException(){
        try {
            Annotation[] hellos = Class.forName("Hello").getAnnotations();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

执行结果


java.lang.ClassNotFoundException: hello
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:340)
    at ...


2.3 非检查异常(Error子类)StackOverflowError

    int stackDeep = 0;
    @Test
    void stackOverflowErrorTest(){
        getName("hello");
    }

    private String getName(String name){
        stackDeep++;
        System.out.println("Stack Deep: "+stackDeep);
        return getName(name);
    }

执行结果


Stack Deep: 5287
java.lang.StackOverflowError
    at java.base/java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:585)
    at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:301)
    at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:290)
    at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:131)
    at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:208)
    at java.base/java.io.BufferedWriter.flushBuffer(BufferedWriter.java:120)
    at java.base/java.io.PrintStream.writeln(PrintStream.java:722)
    at java.base/java.io.PrintStream.println(PrintStream.java:1028)
    at ...


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值