Java异常

异常分为Checked和Unchecked,除了Error与RuntimeException是Unchecked(提醒不强烈,程序运行时才报错,适合不容易出错的地方,在自定义异常时需继承RuntimeException类)以外,其他剩下的异常都是Checked Exception(提醒强烈,编译阶段报错,适合容易出错的地方,在自定义异常时需继承Exception类)。

Checked Exception需要用try...catch...捕获或者用throws抛出,Unchecked Exception则可以不做处理

异常处理

public class Demo01 {
    public static void main(String[] args) {
        // 假设要捕获多个异常,从小到大捕获
        try {   // try监控区域
            System.out.println(1 / 0);
        } catch (ArithmeticException e) {   //可以有多个catch
            e.printStackTrace(); // 打印错误的栈信息
        }catch (IndexOutOfBoundsException e){    
        // 在java中所有捕获范围小的异常,必须放在捕获大的异常之前。否则程序在编译的时候就会出现错误提示
            System.out.println("Array");
        }finally {  //可选
            System.out.println("finally");
            cal(0);
        }
        // 快捷键Ctrl + Alt + T

        // 处理div()方法抛出的异常
        try {
            System.out.println(div(1,0));
        } catch (ArithmeticException e) {
            e.printStackTrace();
        }
    }
    public static void cal(int a) {
        if (a == 0) {
            // throw 则是指拋出的一个具体的异常类型,执行 throw 则一定抛出了某种异常对象。
            throw new RuntimeException("a为0");	//不需要进一步处理(try...catch或用throws抛出)
        }
    }
    // throws 用来声明一个方法可能抛出的所有异常信息,表示出现异常的一种可能性,但并不一定会发生这些异常;
    public static int div(int a, int b) throws ArithmeticException {
        return a / b;
    }
    public static void testException(int a) {
        if(a < 0){
            try {
                throw new Exception(); // 需要进一步处理
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

自定义异常

(1)定义一个新的异常类,这个类必须是Throwable类或Exception类的子类。定义格式如下:

class 自定义异常类名 extends Exception{
	异常类体;
}

(2)自定义的异常类,一般只要声明两个构造方法,一个是不用参数的,另一个以字符串为参数。

例如,定义一个MyException的异常类如下:

class MyException extrends Exception {
    public MyException(){}
    public MyException(String msg){
        super(msg);
    }
}

Exception类从父类Throwable那里继承了很多方法,其中最常用的有以下三种:
String getMessage() 获得异常对象的描述信息
String toString()   返回描述当前Exception类信息的字符串
void printStackTrace() 向标准输出设备打印出当前异常对象的调用堆栈路径

posted @ 2022-07-28 00:30  TimQiu  阅读(22)  评论(0编辑  收藏  举报