一、分开捕获或者嵌套使用

我们先看看下面这段代码:

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异常的嵌套和级联的更多相关文章

  1. Java异常的面试问题及答案-Part 1

    本文由 ImportNew - 韩远青 翻译自 Journaldev. Java提供了一个健壮的.面向对象的方法来处理出现异常,称为Java异常处理.我以前写过一篇长文章来介绍Java异常处理,今天我 ...

  2. 全面理解Java异常的运行机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

  3. JAVA异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...

  4. 两张图解读Java异常与断言

    两张图解读Java异常与断言                                 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...

  5. 【开发技术】java异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...

  6. Java 异常基础详解

    目录 1. Java 中的异常 1.1 什么是异常? 1.2 什么是异常处理? 1.2.1 异常处理的优势 1.3 Java 异常类的层次结构 1.4 异常类型 1.5 检查和未检查异常之间的区别 1 ...

  7. Java基础 -- 深入理解Java异常机制

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  8. JAVA 异常类型结构分析

    JAVA 异常类型结构分析 Throwable 是所有异常类型的基类,Throwable 下一层分为两个分支,Error 和 Exception. Error 和 Exception Error Er ...

  9. Java异常(三) 《Java Puzzles》中关于异常的几个谜题

    概要 本章介绍<Java Puzzles>中关于异常的几个谜题.这一章都是以代码为例,相比上一章看起来更有意思.内容包括:谜题1: 优柔寡断谜题2: 极端不可思议谜题3: 不受欢迎的宾客谜 ...

随机推荐

  1. Oracle 11.2.0.4单实例打补丁

    Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考 写在前面: ·         1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补 ...

  2. Java常用关键字的原理及用法

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843135.html 一:transient 用途:Java中一个类在定义时如果实现了Serilizabl ...

  3. XGBoost使用教程(与sklearn一起使用)二

    一.导入必要的工具包# 运行 xgboost安装包中的示例程序from xgboost import XGBClassifier # 加载LibSVM格式数据模块from sklearn.datase ...

  4. react小项目

    本章要讲述一个评价栏的制作. 首先先简单写一个ract组件来试试. index.html <!DOCTYPE html> <html> <head> <tit ...

  5. shell脚本启动所有集群节点

    #profile变量追加到.bashrc中 cat /etc/profile >> ~/.bashrc #start-all-cluster.sh  启动脚本 #!/bin/bash ec ...

  6. JDBC连接池的九种查询

    package JDBC_Demo; import java.sql.SQLException; import java.util.List; import java.util.Map; import ...

  7. SIFT和SURF特征(草稿)

    (草稿) https://www.cnblogs.com/gavanwanggw/p/7073905.html

  8. NOIP 2002 选数

    洛谷 P1036 选数 洛谷传送门 JDOJ 1297: [NOIP2002]选数 T2 JDOJ传送门 Description ​ 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k< ...

  9. FormData用法

    https://www.jianshu.com/p/230e7000cefd FormData的主要用途有两个: 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表 ...

  10. POJ2239-Selecting Courses-(匈牙利算法)

    题意:n门课,每门各自有t个开课时间,在不冲突的情况下选最多课. 题解:把周p第q节课转化为数值sum,表示在一周7*12节课中排第几节,用二分图最大匹配. #include<stdio.h&g ...