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

  • 相关阅读:
    Android中Acition和Category常量表
    android系统各种音量的获取与设置
    Swift中数组和字典都是值类型
    iOS中的日期和时间
    iOS中的日历
    UILabel的富文本显示选项
    使用NSURLProtocol和NSURLSession拦截UIWebView的HTTP请求(包括ajax请求)
    Error Domain=NSURLErrorDomain Code=-1202,Https服务器证书无效
    iOS计算完整文字高度(适应iOS 10)
    NSUserDefaults存取失败
  • 原文地址:https://www.cnblogs.com/heyang78/p/11779660.html
Copyright © 2011-2022 走看看