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

最新文章

  1. c# Enumerable中Aggregate和Join的使用
  2. 从.NET和Java之争谈IT这个行业
  3. 改变Vim在iTerm2中的光标
  4. NeuSoft(4)编写字符设备驱动
  5. [问题2014S12] 复旦高等代数II(13级)每周一题(第十二教学周)
  6. Sql Server:不允许 ASSIGNMENT 语句中包含 FOR XML 子句
  7. D.T SOFTWARE (1) 软件架构直播答疑课程
  8. UIWebView stringByEvaluatingJavaScriptFromString的使用方法
  9. JS七种加密解密方法
  10. 二分求解 三角形 stl的应用 涉及范围的二分查找可以先求上界再算下界,结果即上界减下界
  11. 图片,音频资源预加载和文档dom加载
  12. java 图片质量压缩
  13. python的一些内置模块
  14. Git简易的命令入门
  15. java大数BinInteger
  16. Entity Framework 5中遇到的 mysql tinyint(1) 转换为 bool 的问题 (我用的是VS2013中的EF5版本)
  17. C# 单例模式的五种写法
  18. bzoj千题计划231:bzoj1997: [Hnoi2010]Planar
  19. HDU 1258 Sum It Up (DFS)
  20. angularjs 常用方法

热门文章

  1. Ubuntu的apt-get代理设置
  2. DNSMaper 一款子域名枚举与地图标记工具
  3. Sliverlight/WPF 样式使用方法
  4. Django drf:cbv(class base view)源码分析
  5. web.py之cookie和session
  6. rsync备份案例
  7. 华中校赛 14th
  8. nginx添加模块记录
  9. Reloading current route in Angular 5 / Angular 6 / Angular 7
  10. LOJ2265. 「CTSC2017」最长上升子序列