【Java基础】异常

1. 基本信息

  1. 异常指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常执行。异常指的并不是语法错误
  2. 异常的根类是:java.lang.Throwable,其中有两个子类:java.lang.Error(不能处理,只能尽量避免)和java.lang.Exception(由于使用不当,可以避免)

2. Throwable 体系

img

2.1 Exception

  1. 异常就相当于程序得了一个小毛病,把异常处理掉,程序可以继续运行。
  2. 编译时期异常:也被称之为可检查异常,在编译过程中,就会检查,如果说有处理异常,就会编译失败
  3. 运行时期异常:也被称之为不检查异常,在运行过程中,检查异常,在编译过程中并不会强制要求

2.2 Error

  1. Error 是指在正常情况之下,不大可能出现的情况,绝大部分的Error 都会导致程序处于非正常,不可恢复的状态。不便于也不需要进行捕获
  2. 错误相当于程序出现了一个无法自行解决的问题,必须修改源代码,程序才能够继续执行

2.3 常见的 Exception 和 Error

  1. 两者都是集成了Throwable类,在Java中, 只有Throwable类型的实例才可以被抛出或者是捕获,他是异常处理机制的基本组成类型。
  2. ClassNotFoundException:当应用程序试图使用以下方法通过字符串名加载类时,但是没有找到指定名称的类的定义,抛出该异常:
  • Class 类中的 forName 方法。
  • ClassLoader 类中的 findSystemClass 方法。
  • ClassLoader 类中的 loadClass 方法。
  1. NoClassDefFoundError:运行时JVM加载不到类或者是找不到类

3. 异常的处理

3.1 抛出异常throw

抛出异常是如何进行操作的

  1. 创建一个异常对象,封装一些提示信息(信息是可以由自己进行编写的)

  2. 需要将这个异常告知调用者,怎么告知,怎样将这个异常对象传递到调用者处,--------通过关键字throws是可以进行操作的,throw处异常对象

作用

可以使用throw 关键字在指定的方法中抛出指定的异常

使用格式

throw  new XXXXXException ("异常产生的原因")

注意事项

必须写在方法的内部,后面所new的对象必须是Exception或这是Exception的子类对象

案例

public class demo {
    public static int getIndex(int []arr ,int index){
        int num  = arr.length -1;
        if( index > num || index<0){
            throw  new ArrayIndexOutOfBoundsException("数组下标异常");
        }
        return  arr[index];
    }
    public static void main(String[] args) {
        int arr[]= {34,54,56};
        System.out.println(getIndex(arr,1));
        System.out.println(getIndex(arr,5));
        System.out.println(getIndex(arr,2));
    }

}

3.2 捕获异常try catch finally

try{
    //可能出现异常的部位
}catch(异常类型  e){
    //处理异常代码,用于进行某种异常的捕获,可以对出现的异常进行处理
}
  1. 捕获异常:可以对出现的异常进行指定的处理

  2. try- catch必须是连用的,不能单独出现

  3. finally中无论异常是否会出现,都需要执行。由于异常会引起程序跳转,导致有些语句是不会执行到的,所以说finally就是用来解决这种问题的,因为finally中的代码块是必须要执行

  4. finally不可以单独使用

4. 注意事项

  1. 如果有多个异常要处理,一般是先处理小异常,再依次处理较大的异常。
  2. 尽量不要去捕获类似 Exception这样的通用异常,而是应该捕获特定的异常,方便最终的错误定位
  3. try -cache 代码块会产生额外的性能开销,会影响JVM对代码进行优化,所以,仅仅建议捕获有必要的代码,尽量不要一个大的try包住整段的代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佩奇inging

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值