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