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
网友评论