Java异常处理 try catch finally 多重catch 异常分类处理

Java异常处理 try catch finally 多重catch 异常分类处理

输入两个数进行求商

使用if-else语句实现实现处理异常
import java.util.Scanner;

public class Test {
   
    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        if (sc.hasNextInt()) {
   
            int firstInt = sc.nextInt();
            System.out.println("请输入第二个数:");
            if (sc.hasNextInt()) {
   
                int secondInt = sc.nextInt();
                if (secondInt == 0) {
   
                    System.out.println("除数不能为0");
                } else {
   
                    System.out.println("商:" + firstInt / secondInt);
                }
            } else {
   
                System.out.println("第二个数不是int类型的数据!");
            }
        } else {
   
            System.out.println("第一个数不是int类型的数据!");
        }
    }
}

用if-else堵漏洞的缺点:

  • 代码臃肿、可读性差,业务代码和处理异常的代码混在一起
  • 程序员需要花费大量的经历来维护这个漏洞且很难堵住所有的漏洞。
使用try-catch处理异常
public class Test {
   
    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 e) {
   
            System.out.println(e);
        }
    }
}
  • 当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常事件的代码。
  • 寻找的过程从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后Java运行时系统把当前异常对象交给这个方法进行处理。这一过程称为捕获(catch)异常。
  • 如果Java运行时系统找不到可以捕获异常的方法,则Java运行时系统终止,相应的Java程序也将退出。

原理:把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的( e )中异常对象接收;接收以后,执行catch后面的{ }里面的代码,try-catch后面的代码不受影响。

  • try中没有异常,catch中代码不执行;try中有异常,catch进行捕获
    • 如果catch中异常类型和抛出的异常类型匹配:成功捕获,执行catch中的代码
    • 如果catch中异常类型和抛出的异常类型不匹配:未成功捕获,不执行catch中的代码,程序相当于遇到了无法处理的异常,程序中断,后续代码不执行

Note:try中如果出现异常且用catch捕获成功,那么try中后续的代码是不会执行的;当然没捕获成功程序中断也不会执行。如果catch捕获异常成功,程序不会中断,那么try-catch后面的代码没有影响。

catch异常处理方式

  • 佛系处理:什么都不写,什么都不做

  • 我行我素:输出自定义异常信息

  • 中规中矩:打印异常信息

    • 调用toString方法,显示异常的类名(全限定路径)
    • 显示异常描述信息对应的字符串,如果没有就显示null
    • 显示异常的堆栈信息
  • 破罐子破摔:异常抛回

对一些特定的异常可以再使用代码补救,比如被除数为0,可以在catch中再输入一次

import java.util.Scanner;

public class Test {
   
    public static void main(String[] args) {
   
        //实现一个功能:键盘录入两个数,求商:
        try {
   
            Scanner sc = new Scanner(System.in);
            System

你可能感兴趣的:(java,笔记,java,exception)