Java异常

异常的定义:

在我们编写代码的时候,经常会出现异常的情况,控制台也会打印出一些报错信息,把这些打印的异常信息称为异常.一句话总结就是,在编写和运行时,程序异常情况,称为异常

异常的体系:

java的设计者们设计了很多异常类,来描述不同的异常情况,如下图就是异常的体系结构

这里展开来介绍:

其中Throwable称为异常的顶级父类(一般情况下不使用),分为两大类:Error和Exception

Error:称为错误,是JDK内部的错误,发生在程序员无法控制的情况,

例如:stackOverflowError[堆栈溢出错误(内存过大)],OutofMemoryError[内存溢出错误],

NoSuchFieldError[字段不匹配],NoSuchMethodError[方法不匹配],illegalAccessError[非法访问]等.

Exception:编译时异常,也称为检查异常,编译前需要处理的异常

例如:IOException[文件输入输出(读写操作)],SQLException[编写SQL数据库语句异常]

运行时异常:编译时不需要处理的异常,在程序运行后处理

例如:NullPointerException[空指针异常],DateTimeException[日期时间异常],

IllegalArgumentException[非法参数异常],IndexOutofBoundException[数组下标越界异常],

UnSupportedOperationException[不支持操作异常等]..

如何处理异常:

1)抛出异常 (throw new 异常类名())

2)捕获异常 (try{} catch(){} finally{})

  public static void main(String[] args) {
        //捕获异常
        try {
//            info(0); 1.4
//            info(1); 2.4
            info(2); //3.4
        }catch (NullPointerException e1){
            //getMessage异常里面具体信息
            System.out.println("2.空指针异常!!" + e1.getMessage());
        }catch (IllegalArgumentException e2){
            System.out.println("3.非法参数异常!!" + e2.getMessage());
        }
        finally {
            System.out.println("4.最后总要执行!!");
        }
    }

    //抛出异常
    public static void info(int i) throws NullPointerException,IllegalArgumentException{
        //i == 1 空指针
        if (i == 1){
            throw new NullPointerException();
        }
        //i == 2 非法参数
        if (i == 2){
            throw new IllegalArgumentException();
        }
        // 其他 正常
        System.out.println("1. info 方法调用正常");
    }

自定义异常:

在实际开发中,如果企业有自己的问题,相同异常来表示,那么就需要自己来定义异常类

定义的特点: 类名自定义,后缀建议为Exception

自定义类型发生的场景: 编译时/运行时(通常情况下运行时)

1.如果自定义异常类继承Excpetion,则是编译时异常。
    特点:方法中抛出的是编译时异常,必须在方法上使用throws声明,强制调用者处理。
    
2.如果自定义异常类继承RuntimeException,则运行时异常。
    特点:方法中抛出的是运行时异常,不需要在方法上用throws声明。

要求: 需要重写对应的构造函数

编译时异常代码如下:

//编译时异常
public class StudentException extends Exception{
    public StudentException() {
    }

    public StudentException(String message) {
        super(message);
    }

    public StudentException(String message, Throwable cause) {
        super(message, cause);
    }

    public StudentException(Throwable cause) {
        super(cause);
    }

    public StudentException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

运行时异常代码如下:

//运行时异常
public class UserException  extends RuntimeException{
    public UserException() {
    }

    public UserException(String message) {
        super(message);
    }

    public UserException(String message, Throwable cause) {
        super(message, cause);
    }

    public UserException(Throwable cause) {
        super(cause);
    }

    public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

测试类代码如下:

public class TestCustom {
    public static void main(String[] args) {
        try {
            info(2);
        } catch (StudentException e) {
            throw new RuntimeException(e);
        } finally {
        }
    }

    public static void info(int i) throws StudentException,UserException{
        if (i == 1){
            throw new StudentException("学生异常");
        }
        if (i == 2){
            throw new UserException("用户异常");
        }
        //
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值