java异常的嵌套和级联
一、分开捕获或者嵌套使用
我们先看看下面这段代码:
public class Cal {
public int div(int a, int b) {
int result = a / b;
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = 0;
int num1 = 0;
int num2 = 0;
//1、这里可能会抛出异常
System.out.print("num1=");
num1 = scanner.nextInt();
System.out.print("num2=");
num2 = scanner.nextInt();
Cal cal = new Cal();
//2、这里也可能抛出异常
s = cal.div(num1, num2);
System.out.println(s);
}
}
在这段代码中有可能抛出异常的有两个地方,那么我们应该如何处理呢。
1、当然我们可以分开捕获。如下面的代码:
public class Cal {
public int div(int a, int b) {
int result = a / b;
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = 0;
int num1 = 0;
int num2 = 0;
//1、这里可能会抛出异常
try {
System.out.print("num1=");
num1 = scanner.nextInt();
System.out.print("num2=");
num2 = scanner.nextInt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Cal cal = new Cal();
//2、这里也可能抛出异常
try {
s = cal.div(num1, num2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(s);
}
}
2、我们还可以在try里面嵌套的使用try语句。如下面代码所示:
public class Cal {
public int div(int a, int b) {
int result = a / b;
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = 0;
int num1 = 0;
int num2 = 0;
try {
//1、这里可能会抛出异常
System.out.print("num1=");
num1 = scanner.nextInt();
System.out.print("num2=");
num2 = scanner.nextInt();
try {
Cal cal = new Cal();
//2、这里也可能抛出异常
s = cal.div(num1, num2);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(s);
}
}
二、使用级联捕获异常
上面介绍的这两种方法都不是好办法,以为过多的使用try捕获异常会影响程序的效率。所以我们推荐使用的是级联捕获异常。格式如下
try{
…...
}catch(ArrayIndexOutOfBoundsException e) {
……
} catch(ArithmeticException e) {
……
} catch(Exception e) {
……
}
注意:使用多重 catch 语句时,异常子类一定要位于异常父类之前。
所以以下这种方式是错误的。
try{
…...
} catch(Exception e) {
……
} catch(ArrayIndexOutOfBoundsException e) {
……
}
好,那么我们可以修改上面的代码如下:
public class Cal {
public int div(int a, int b) {
int result = a / b;
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int s = 0;
int num1 = 0;
int num2 = 0;
try {
//1、这里可能会抛出异常
System.out.print("num1=");
num1 = scanner.nextInt();
System.out.print("num2=");
num2 = scanner.nextInt();
Cal cal = new Cal();
//2、这里也可能抛出异常
s = cal.div(num1, num2);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (InputMismatchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(s);
}
}
由于多次的使用try或影响效率。所以我们如果碰到循环的时候,应该把try语句放到循环的外面,例如我们并不推荐你这样写代码:
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4 };
Cal cal = new Cal();
for (int i = 0; i < arr.length; i++) {
try {
int s = cal.div(arr[i], 2);
} catch (Exception e) {
// TODO: handle exception
}
}
}
你可以修改成为这样:
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4 };
Cal cal = new Cal();
try {
for (int i = 0; i < arr.length; i++) {
int s = cal.div(arr[i], 2);
}
} catch (Exception e) {
// TODO: handle exception
}
}
java异常的嵌套和级联的更多相关文章
- Java异常的面试问题及答案-Part 1
本文由 ImportNew - 韩远青 翻译自 Journaldev. Java提供了一个健壮的.面向对象的方法来处理出现异常,称为Java异常处理.我以前写过一篇长文章来介绍Java异常处理,今天我 ...
- 全面理解Java异常的运行机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
- JAVA异常的捕获与抛出原则
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...
- 两张图解读Java异常与断言
两张图解读Java异常与断言 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...
- 【开发技术】java异常的捕获与抛出原则
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...
- Java 异常基础详解
目录 1. Java 中的异常 1.1 什么是异常? 1.2 什么是异常处理? 1.2.1 异常处理的优势 1.3 Java 异常类的层次结构 1.4 异常类型 1.5 检查和未检查异常之间的区别 1 ...
- Java基础 -- 深入理解Java异常机制
异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...
- JAVA 异常类型结构分析
JAVA 异常类型结构分析 Throwable 是所有异常类型的基类,Throwable 下一层分为两个分支,Error 和 Exception. Error 和 Exception Error Er ...
- Java异常(三) 《Java Puzzles》中关于异常的几个谜题
概要 本章介绍<Java Puzzles>中关于异常的几个谜题.这一章都是以代码为例,相比上一章看起来更有意思.内容包括:谜题1: 优柔寡断谜题2: 极端不可思议谜题3: 不受欢迎的宾客谜 ...
随机推荐
- 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中
现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...
- spring项目使用mave将第三方jar包打进war包中
背景:一个标准的ssm项目,需要使用到第三方jar,现需要将项目发布到liunx的服务器上,将项目打成war包,第三方war包也需要打进去 首先是直接打包,发现第三方jar包并没有打进去......蛋 ...
- Linux shell case条件判断及位置变量
case语句使用于需要进行多重分支的应用情况 case分支判断结构 语法: case 变量名称 in value1) statement statemen ...
- 在centos下安装pycrypto报错
yum -y install python36-devel libevent-devel libjpeg-devel zlib-devel
- JS高阶---数据、变量、内存
[一]基础 (1)什么是数据? 存储在内存里 代表特定信息 本质为0101,二进制数据 (2)什么是内存? 内存条通电后产生的可存储数据的空间(临时的) 拓展: 1.2种数据 2.内存分类--栈和堆 ...
- Winform----自定义控件之半透明遮罩(蒙版遮盖指定控件)
先贴运行效果图,源码点击这里下载 1.新建自定义控件 2.实现功能 namespace UserControlLib { [ToolboxBitmap(typeof(ZhLoading)) ...
- AjAX 异步通信
<!DOCTYPE html> <html lang="en"> <head> <title>xmlhttprequest ajax ...
- 第03节-BLE协议各层数据格式概述
本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...
- 201871010117-石欣钰《面向对象程序设计(java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- Linux—— 记录所有登陆用户的历史操作记录
前言 记录相应的人登陆服务器后,做了那些操作,这个不是我自己写的,因为时间久了,原作者连接也无法提供,尴尬. 步骤 history是查询当前连接所操作的命令,通过编写以下内容添加至/etc/profi ...