【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
分类:
Java.Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)