当前位置: 代码迷 >> 综合 >> 异常——throws finally 以及多重catch
  详细解决方案

异常——throws finally 以及多重catch

热度:78   发布时间:2023-12-06 17:31:14.0

throw抛出

import java.util.Scanner;public class Expection {public static void main(String[] args) {try {Scanner sc = new Scanner(System.in);System.out.println("请输入第一个数");int num1 = sc.nextInt();System.out.println("请输入第二个数");int num2 = sc.nextInt();System.out.println("商:" + num1 / num2);}catch (Exception ex){throw ex;}System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");}}

什么情况下 try—catch后面的内容不执行

1.throw抛出异常的情况下 后面的代码不执行 里面写代码也会报错

2.try没有进行正常的异常捕获 就是没有捕获成功

3.在try中遇到return 后面写的代码就是多余的 编译时就会报错

那么 怎么样才能使try—catch后面的代码执行

只要将必须执行的代码放到finally里面 就会执行

import java.util.Scanner;public class Expection {public static void main(String[] args) {try {Scanner sc = new Scanner(System.in);System.out.println("请输入第一个数");int num1 = sc.nextInt();System.out.println("请输入第二个数");int num2 = sc.nextInt();System.out.println("商:" + num1 / num2);}catch (Exception ex){throw ex;}System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");System.out.println("谢谢你使用计算器111");}finally {System.out.println("谢谢你使用计算器111");}}

return和finally是先执行finally

但是有句话很厉害 可以让finally中的代码不执行 程序走到那边直接就停止了

System.exit(0);

多重catch

try中出现异常后 将异常类型跟catch后面的类型依次比较 按照代码的顺序进行比对 执行第一个与异常类型匹配的catch语句 一旦执行其中一句 其他都会被忽略

public class Test3 {public static void main(String[] args) {try{Scanner sc = new Scanner(System.in);System.out.println("请输入第一个数");int num1 = sc.nextInt();System.out.println("请输入第二个数");int num2 = sc.nextInt();System.out.println("商:" + num1 / num2);}catch (ArithmeticException ex){System.out.println("除数不能为0");}catch (InputMismatchException ex){System.out.println("你录入的数据不是int类型的");}catch (Exception ex){System.out.println("对不起 有异常");}finally {System.out.println("谢谢你使用计算器111");}}
}

在安排catch语句的顺序 一般会将特殊异常放在前面(并列) 一般化的异常放在后面

先写子类异常 再写父类异常

在jdk1.7以后 异常处理方式 可以用并列号|符号连接