zoukankan      html  css  js  c++  java
  • 【Java】异常的平行处理

    Java对异常的处理,是平行的处理,进行了特定异常的处理后,便不会进入通用异常的处理,出现了未曾显式捕获的异常时,才会进入最宽泛的Excption处理。

    具体请看下面代码:

    package com.hy.csvdld.util;
    
    import java.sql.SQLException;
    
    public class Main {
        public static void main(String[] args) {
            try {
                throw new SQLException("ABC");
            }
            catch(NullPointerException e) {
                System.out.println("Catch NullPointerException");
            }
            catch(SQLException e) {
                System.out.println("Catch SQLException");
            }
            catch(Exception e) {
                System.out.println("Catch Exception");
            }finally {
                System.out.println("finally block");
            }
        }
    }

    输出内容:

    Catch SQLException
    finally block

    由上可见,进入SQLException的处理后,程序直接进入finally的处理,而不是进入更宽泛的Exception处理处。

    再验证一次:

    package com.hy.csvdld.util;
    
    import java.sql.SQLException;
    import java.util.List;
    
    public class Main {
        public static void main(String[] args) {
            try {
                List<String> ls=null;
                
                if(ls.size()==1) {
                    throw new SQLException();
                }
            }
            catch(NullPointerException e) {
                System.out.println("Catch NullPointerException");
            }
            catch(SQLException e) {
                System.out.println("Catch SQLException");
            }
            catch(Exception e) {
                System.out.println("Catch Exception");
            }finally {
                System.out.println("finally block");
            }
        }
    }

    输出:

    Catch NullPointerException
    finally block

    这段程序也昭示了进入一种异常处理就不会进入更宽泛的异常处理段。

    再看一段:

    package com.hy.csvdld.util;
    
    import java.sql.SQLException;
    
    public class Main {
        public static void main(String[] args) {
            try {
                int i=5,j=0;
                int k=i/j;
                
                if(k>0) {
                    throw new SQLException();
                }
            }
            catch(NullPointerException e) {
                System.out.println("Catch NullPointerException");
            }
            catch(SQLException e) {
                System.out.println("Catch SQLException");
            }
            catch(Exception e) {
                System.out.println("Catch Exception");
                System.out.println(e.getMessage());
            }finally {
                System.out.println("finally block");
            }
        }
    }

    输出:

    Catch Exception
    / by zero
    finally block

    这段代码明确展示,出现了没有显式捕获的异常,才会进入宽泛的Exception处理。

    package com.hy.expired;
    
    import java.sql.SQLException;
    
    public class Main {
        public static void main(String[] args) throws SQLException {
            try {
                int k=5;
                
                if(k>0) {
                    throw new NullPointerException("NPE");
                }else {
                    throw new SQLException("T1");
                }
            }
            catch(NullPointerException e) {
                System.out.println("Catch NullPointerException");
                
                throw new SQLException("T1");
            }
            catch(SQLException e) {
                System.out.println("Catch SQLException");
            }
            catch(Exception e) {
                System.out.println("Catch Exception");
                System.out.println(e.getMessage());
            }finally {
                System.out.println("finally block");
            }
        }
    }

    输出:

    Catch NullPointerException
    finally block
    Exception in thread "main" java.sql.SQLException: T1
        at com.hy.expired.Main.main(Main.java:19)

    这段代码说明,在异常分支中只要进入了一个分支,即使在其中抛出适合下面分支接纳的异常,那个分支也不会进入。

    --END-- 2019年11月1日21:24:36

  • 相关阅读:
    剑指 Offer 46. 把数字翻译成字符串
    leedcode:27. 移除元素
    1052. 爱生气的书店老板(滑动窗口)
    剑指 Offer 56
    剑指 Offer 11. 旋转数组的最小数字(二分)
    1919年巴黎和会顾维钧英语演讲稿
    状语从句
    定语从句
    名词性从句
    并列句
  • 原文地址:https://www.cnblogs.com/heyang78/p/11779660.html
Copyright © 2011-2022 走看看