Java异常之初认识二

 1 public class Demo13{
 2     
 3     
 4     /*Java规定:
 5         1.必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,这种类型的异常称为Checked Exception。
 6 
 7         2.不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
 8     */
 9     public static void main(String[] args) {
10         try{
11             process1();
12         }catch(Exception e){
13             //main()中捕获IllegalArgumentException,我们看看打印的异常栈
14             e.printStackTrace();
15             //注意到Caused by: Xxx,说明捕获的IllegalArgumentException并不是造成问题的根源,根源在于NullPointerException,是在Main.process2()方法抛出的。
16         }
17         
18     }
19     
20     //当process2()抛出NullPointerException后,被process1()捕获,然后抛出IllegalArgumentException()
21     
22     static void process1(){
23         try{
24             process2();
25         }catch(NullPointerException e){
26             //如果一个方法捕获了某个异常后,又在catch子句中抛出新的异常,就相当于把抛出的异常类型“转换”了:
27             //为了能追踪到完整的异常栈,在构造异常的时候,把原始的NullPointerException实例传进去,新的IllegalArgumentException就可以持有原始NullPointerException信息
         //捕获到异常并再次抛出时,一定要留住原始异常,否则很难定位第一案发现场!
28 throw new IllegalArgumentException(e); 29 } 30 } 31 32 33 static void process2(){ 34 throw new NullPointerException(); 35 } 36 37 }

 

posted @ 2020-12-28 14:09  dog_IT  阅读(61)  评论(0编辑  收藏  举报