【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】异常的平行处理的更多相关文章
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- Java异常体系及分类
上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- 第11章 Java异常与异常处理
1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...
- java 异常
1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return 和 throw的区别 return 符合函数要求的值 throw 有问题的时候用它结束 ...
- 3.Java异常进阶
3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...
- 2.Java异常学习
1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...
- java异常架构图 和几个面试题
1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...
- 黑马----JAVA异常
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...
随机推荐
- MHA-结合MySQL半同步复制高可用集群(Centos7)
目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...
- Bind Mounts and File System Mount Order
When you use the bind option of the mount command, you must be sure that the file systems are m ...
- Linux学习笔记(十四)磁盘管理(二):格式化、挂载以及Swap分区
一.格式化 第一种写法 mkfs.文件系统 [分区名称(设备文件路径)] 例如:对sdb硬盘的第一个分区以ext3文件系统进行格式化 第二种写法 mkfs -t 文件系统 [分区名称(设备文件路径) ...
- 18 Candidates for the Top 10 Algorithms in Data Mining
Classification============== #1. C4.5 Quinlan, J. R. 1993. C4.5: Programs for Machine Learning.Morga ...
- go语言合并两个数组
https://stackoverflow.com/questions/16248241/concatenate-two-slices-in-go Add dots after the second ...
- IP分组
IP 分组为了更准确地讨论 I n t e r n e t协议处理,我们必须定义一些名词.图 显示了在不同的I n t e r n e t层之间传递数据时用来描述数据的名词.我们把传输协议交给 I P ...
- SpringBoot + MySQL + MyBatis 整合 Redis 实现缓存操作
本地安装 Redis Redis 安装:https://www.cnblogs.com/oukele/p/11373052.html 项目结构: SpringBootRedis 工程项目结构如下: ...
- JUC-12.4-execute和sumbit的区别
在Executor接口中只定义了execute方法,而submit方法则是在ExecutorService接口中定义的. execute没有返回值,而submit有返回值. 转自: https://w ...
- [AH2017/HNOI2017]抛硬币(扩展lucas)
推式子+exlucas. 题意: 小 A 和小 B 是一对好朋友,两个人同时抛 b 次硬币,如果小 A 的正面朝上的次数大于小 B 正面朝上的次数,则小 A 获胜. 小 A 决定在小 B 没注意的时候 ...
- 009_linuxC++之_友元函数
(一)定义:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数.类授予它的友元特别的访问权.通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其 ...