2、异常处理

一、异常

程序在运行时的时候,出现的不正常事件,就是所谓的异常。

1、异常分类

![异常的分类.png](https://img-blog.csdnimg.cn/img_convert/0ed3cb57b5393dcbd05b96c462bfc475.png#clientId=u59d967fa-6bc6-4&crop=0&crop=0&crop=1&crop=1&from=ui&id=u3f2c7bef&margin=[object Object]&name=异常的分类.png&originHeight=548&originWidth=861&originalType=binary&ratio=1&rotation=0&showTitle=false&size=73700&status=done&style=none&taskId=u7d9fbd40-66c3-4314-a9d5-5e651de23ae&title=)

Throwable:可抛出的,一切错误或异常的父类,,位于java.lang包中

  • Error: JVM、硬件、执行逻辑错误,不能手动处理。常见错误:StackOverflowError、OutOfMemoryError
  • Exception:程序在运行和配置中产生的问题,可处理
    • RuntimeException:运行时异常,可处理,可不处理
    • CheckedException:检查时异常,必须处理
//异常:可以处理
int[] nums={3,12,11,55};
        System.out.println(nums[4]);//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
//错误:不能处理
int[] nums= new int[1024*1024*1024];//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
//此处若无效需要设置JVM运行内存值-Xmx256m
//异常:检查异常和运行时异常
int div = 10 / 0;//Exception in thread "main" java.lang.ArithmeticException: / by zero/编译器不检查的异常
//编译能检查出来,检查异常
FileInputStream fileInputStream = new FileInputStream("");

检查异常:由编译器能够检查出来的异常。外部原因导致的异常,程序中必须处理。

  • FileNotFoundException
  • IOException
  • SQLException

运行时异常RuntimeException,也叫非受检异常,编译器不检查的异常。往往一些代码逻辑问题。

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ArithmeticException
  • ClassCastException
  • NumberFormatException

2、异常的处理

捕获异常:try,catch,finally

语法:

try {
    //可能产生异常的代码
    FileInputStream fileInputStream = new FileInputStream("");
} catch (异常类型1 e) {
    //捕获异常的处理
} catch (异常类型1 e) {
    //捕获异常的处理
} finally {
    //无论程序是否产生异常,此处代码一定会被执行
    //比如:释放资源,删除临时文件。。
}

注意点:

  1. 一个try可以匹配多个catch
  2. 如果try中产生了异常对象,那么会跳出try,进到相应的catch中处理异常,从上向下匹配。
  3. 如果是多个catch语句,那么小的异常捕获处理写在前面,大的异常捕获处理写后面。
  4. finally可写可不写

ctrl+alt+t:try,catch,finally代码块快捷键

声明异常throws

方法级别上,向外抛出异常。

方法的声明上就要通过throws关键字声明抛出异常:

public static void main(String[] args) throws FileNotFoundException {
    FileInputStream fileInputStream = new FileInputStream("");
}

按照方法的调用链反向传递,如始终没有处理异常,最终会由JVM进行默认异常处理(打印堆栈跟踪信息).


运行时异常的抛出,不一定要处理

检查异常的抛出,必须处理

ExceptionRuntimeException是的区别?
    1RuntimeExceptionExceptionException的子类。
    2Exception包含了受检异常,所以抛出Exception以及受检异常时,代码中一定要给处理。如果抛出的是RuntimeException(运行时异常,非受检)以及它的子类异常,程序中不一定非要处理。
    3、重写的时候,子类不能抛出比父类更大的异常

throw关键字

  1. throws,用于定义方法的时候,声明该方法向外抛出异常。
  2. throw,主动抛出一个异常的对象。打断程序的执行。配合try/catch,或者throws来使用。

3、自定义异常

需继承Exception或Exception的子类,代表特定问题。

异常类型名称望文生义,可在发生特定问题时抛出对应的异常

public class AgeException extends RuntimeException {
    public AgeException(String message) {
        super(message);
    }
}
public class Person {
    private int age;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age<0){
            throw new  AgeException("年龄不对");
        }
        this.age = age;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值