异常

147 阅读1分钟

一、分类

  • 异常Exception:代码级别的问题,可以被捕获并进行相应的处理。
  • 错误Error:JVM级别的严重错误,出现Error会让程序进入不可恢复的状态。

在这里插入图片描述

  • 运行时异常,也叫做非受检异常(unCheckedException),有的运行时异常可以不做处理,比较普遍,所以可以暂不处理。

    • NullPointerException 空指针异常
    • ArithmeticException 数学运算异常
    • ArrayIndexOutOfBoundsException 数组下标越界异常
    • ClassCastException 类型转换异常
    • NumberFormatException 数字格式不正确异常
    • 等等
  • 编译时异常,受检异常(CheckedException),必须要在编译前处理的异常。

    • SQLException:操作数据库的异常
    • IOException:文件操作出现的异常
    • FileNotFoundException:文件未找到异常,一般用于IO流
    • ClassNotFoundException:类未找到异常
    • IllegalArgumentException:参数异常

二、异常处理的方式

两种:

  • throws:抛给上级
  • try...catch...finally:在本级捕获处理

注意:一般catch(异常)时,如果有多级异常,一般要求子类在前,父类在后。

//这样就报错了
public static void main(String[] args) {
    try{
        int i = 10/0;
    }catch (Exception e){
        e.printStackTrace();
    }catch (RuntimeException e){
        e.printStackTrace();
    }
}

三、自定义异常

让自己定义的类去继承Exception或RuntimeException类。

  • 继承Exception类的是编译时异常
  • 继承RuntimeException类的是运行时异常

定义一个异常:

public class SelfDefinitionException extends Exception{
    public SelfDefinitionException(String message) {//构造器
        super(message);
    }
}

测试:

public class SelfDefinitionExceptionTest {
    public static void main(String[] args) {
        int i = 0;
        if (i == 0){
            try {
                throw new SelfDefinitionException("该数不能等于0");
            } catch (SelfDefinitionException e) {
                e.printStackTrace();
            }
        }
    }
}