Java的异常处理

一、异常的概念
程序运行总会有出现错误状况的时候,例如:找不到文件、输入值类型不符合、数组下标为负数等,java把这些经常出现的各种意外状况当成对象进行处理。所有异常和错误的超类都是Throwable。
下面是异常的分类
Throwable有两个子类Error、Exception
错误是指合理的应用程序不应该捕获的严重问题,大多数Error都是异常的,虽然ThreadDeath Error是“正常”的,但它也是Error的子类,因为大多数应用程序都不应该尝试捕获它。

异常是指应用程序想要捕获的情况,异常又分为运行时异常和检查异常,检查异常可以通过在方法体添加throws字句,那么在调用该方法时就要求try catch异常,否则编译错误。
异常的一个总体结构图:
这里写图片描述
常见的异常:
ArrayIndexOutOfBoundsException 数组下标越界异常。当对数组的索引值为负数或大于等于数组大小时抛出
ArithmeticException 算术异常。譬如:整数除零等
NullPointerException 空指针异常。 当对象引用为空,调用对象所属类的非静态方法。
ClassNotFoundException 找不到类异常。
NegativeArraySizeException 数组长度为负异常
ArrayStoreException 数组中包含不兼容的值抛出的异常,例如向对象数组传递错误类型的值
SecurityException 安全性异常
IllegalArgumentException 非法参数异常

二、异常的抛出
异常的抛出通过throws和throw,前者是针对一个方法,后者针对一个对象,具体使用如下:
这里写图片描述
输出结果:
这里写图片描述
抛出的异常会交给上级调用者,上级调用者如果不做处理也可以抛出,最终抛给虚拟机都没有处理,程序就会“挂掉”。
三、异常的捕获
异常的捕获使用关键字try和catch,在上面也已经使用过,在try代码块中添加可能会出现异常的代码段,但尽量不要过长,如果try中代码出现异常,catch就会捕获这个异常并在其代码块中进行异常处理。在catch时会传入一个异常对象引用作为参数,通常传入的异常最好是具体的某种异常,也就是说在捕获异常时尽量不要使用捕获全部异常的语句。

还可以在添加finally关键字,表示无论程序是否出现异常,最后都会运行finally块中的代码。
当然凡事都有例外,当出现下面情况时,finally是不会执行
1、在finally语句块中发生了异常。
2、在前面的代码中用了System.exit()退出程序。
3、程序所在的线程死亡。
4、关闭CPU。

四自定义异常
通过继承Exception及其子类可以自定义异常类,最好会选择相近的异常类继承
下面是自定义异常的使用,以及堆栈信息
这里写图片描述
输出结果:
这里写图片描述
可根据堆栈信息快速找到异常的源头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值