Java基础复习—异常处理

一、异常的处理机制

1.使用try…catch捕获异常

try {
            System.out.println(1/0);
        } catch (Exception e) {
        	//打印异常的详细描述字符串
            System.out.println(e.getMessage());
        	//打印异常的跟踪栈
            e.printStackTrace();
        }
}

2.异常类的继承

异常类的顶级父类 Throwable 派生了两个子类 Error 和 Exception ;

Error 错误 一般指与虚拟机相关的问题,无法通过catch捕捉,通常应用程序无法处理这些错误。
Exception 异常 则可以通过catch来捕获这些异常;

在多catch时遵守:先小类,后大类 的原则;

 try {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a / b;
            System.out.println("两个数相乘的结果" + c);
        }
        catch (IndexOutOfBoundsException e) {
            System.out.println("数组越界:运行程序时输入的参数个数不够");
        }
        catch (NumberFormatException e) {
            System.out.println("数字格式异常 只能输入整数");
        }
        catch (ArithmeticException e) {
            System.out.println("算术异常");
        }
        catch (Exception e) {
            System.out.println("未知异常");
        }

3.使用finally回收资源

  • 无论是否出现异常都会执行到finally块;
  • finally块中的return,throw会导致 try 块中的语句失效,所以尽量别在finally块中使用这些结束程序的语句;
  • finally块可以和可以和catch块一起出现配合try使用,也可以只出现其中一个配合try块使用。但是try块不能单独出现使用。
  • 在jdk7以后允许将需要将一定需要回收的资源定义在try()的小括号中,在程序执行完之后会有隐式的finally将其回收

二、Checked异常和Runtime异常

1.两者的概述和比较

Exception 异常 分为 checked异常 和 runtime异常,runtime异常指的是RuntimeException及其子类。而checked异常则是出了RuntimeException的其他Exception类。

两者相比:checked异常必须显示的抛出异常,或者通过 try…catch捕捉。而runtime不需要显示的抛出异常,在需要的时候同样可以通过 try…catch捕捉。相比下runtime更加灵活,checked更加警示程序员;

2.使用throws声明抛出异常

在不知道怎么处理异常时可以使用throws抛出异常,该异常由上一级调用者处理。如果main方法也不知道如何处理异常,则交给JVM处理;

tip:被调用者的异常类不能比调用者大

下面的例子调用者的异常类是被调用的父类,程序无异常;

public static void test() throws ArithmeticException {
        System.out.println(1/0);
    }
    
    public static void main(String[] args) throws Exception {
        test();
    }

三、使用throw抛出异常

使用 throw 可以自行抛出异常;

throw抛出的不是一个异常类,而是一个异常实例;

可以自行抛出异常,而不是通过系统抛异常,可以通过程序员自主定义,在开发中可以使得异常处理更加的灵活。

//写法是错误的,只是想使用一下throw方法,qwq
public enum light{ red,green,yellow }
if(Object c != light){
	throw new Exception("输入错误")}

猜你喜欢

转载自blog.csdn.net/weixin_42445650/article/details/88959827