美文网首页
廖雪峰Java 读书笔记 (二) 异常处理

廖雪峰Java 读书笔记 (二) 异常处理

作者: 拜仁的月饼 | 来源:发表于2020-08-23 22:23 被阅读0次

1. Java的异常

  • Java使用异常来表示错误,并通过try ... catch捕获异常;
  • Java的异常是class,并且从Throwable继承;
  • Error是无需捕获的严重错误,Exception是应该捕获的可处理的错误;
  • RuntimeException无需强制捕获,非RuntimeException(Checked Exception)需强制捕获,或者用throws声明;
  • 不推荐捕获了异常但不进行任何处理。
继承树关系

例:

try{
    // 语句
} catch (异常){
   // 语句
}

2. 多Catch语句

可以使用多个catch语句,每个catch分别捕获对应的Exception及其子类。JVM在捕获到异常后,会从上到下匹配catch语句,匹配到某个catch后,执行catch代码块,然后不再继续匹配。存在多个catch的时候,catch的顺序非常重要:子类必须写在前面

最后可以写一个finally语句,可写可不写。finally总是最后执行

package com.Exceptions;

public class TryExp {
    public static void main(String[] args) {
        try{
            process1();
            process2();
            process3();
        } catch (IOException e){
            System.out.println(e);
        } catch (NumberFormatException e){
            System.out.println(e);
        }
    }
}

3. 抛出异常

当某个方法抛出了异常时,如果当前方法没有捕获异常,异常就会被抛到上层调用方法,直到遇到某个try ... catch被捕获为止。可以通过printStackTrace()可以打印出方法的调用栈。printStackTrace()对于调试错误非常有用,上述信息表示:NumberFormatException是在java.lang.Integer.parseInt方法中被抛出的,应从下往上看。

java.lang.NumberFormatException: null
    at java.base/java.lang.Integer.parseInt(Integer.java:614)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at Main.process2(Main.java:16)
    at Main.process1(Main.java:12)
    at Main.main(Main.java:5)

抛出异常的方法:

  • 创建某个Exception的实例;
  • 用throw语句抛出。

小结:

  • 调用printStackTrace()可以打印异常的传播栈,对于调试非常有用;
  • 捕获异常并再次抛出新的异常时,应该持有原始异常信息;
  • =finally抛出异常后,原来在catch中准备抛出的异常就“消失”了,因为只能抛出一个异常。没有被抛出的异常称为“被屏蔽”的异常(Suppressed Exception)。通常不要在finally中抛出异常。如果在finally中抛出异常,应该原始异常加入到原有异常中。调用方可通过Throwable.getSuppressed()获取所有添加的Suppressed Exception。

4. JDK Logging

新建JDK Logging的方法:

Logger logger = Logger.getGlobal();

使用方法:

logger.info("start process...");

七个等级:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

相关文章

网友评论

      本文标题:廖雪峰Java 读书笔记 (二) 异常处理

      本文链接:https://www.haomeiwen.com/subject/fldwjktx.html