JavaSE基础系列之异常

一.异常概念(异常的结构)

1.异常就是"不正常"的含义,在Java语言中主要指程序执行中发生的不正常情况。

2.java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类。

   其中Error主要用于描述Java虚拟机无法解决的严重错误,通常无法编码解决,如:JVM挂掉了等。

   其中Exception主要用于描述因编程错误或偶然外在因素导致的轻微错误,通常可以编码解决,如:0作为除数等。

二.异常产生的原理

    java对异常默认的处理方式,是将问题抛出给上一级。抛出之前,java会根据错误产生的异常类,创建出该类的对象,底层并通过throw关键字将异常抛出给上一级,不断向上抛出,直到抛给了JVM虚拟机,虚拟机拿到异常之后,就会将错误的原因和所在的位置,打印在控制台。

 三.异常分类

java.lang.Exception类是所有异常的超类,主要分为以下两种:RuntimeException - 运行时异常,也叫作非检测性异常。IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能被编译器检测出来的异常。

其中RuntimeException类的主要子类:

ArithmeticException - 算术异常

ArrayIndexOutOfBoundsException - 数组下标越界异常

NullPointerException - 空指针异常

ClassCastException - 类型转换异常

NumberFormatException - 数字格式异常

注意:

当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。

四.异常的处理方式

    在开发当中尽量使用if条件判断避免异常的发生;若实在避免不了,则进行异常的捕获; 若实在捕获不了,则进行异常的抛出;若希望使用针对性的异常,则需要自定义异常

1. 量使用if条件判断来避免异常的发生.例如:对象是否为空。

2.异常捕获

语法格式 :

try { 编写可能发生异常的代码; }

catch(异常类型 引用变量名) { 编写针对该类异常的处理代码;}

finally { 编写无论是否发生异常都要执行的代码; } //关闭已经打开的文件等。

(注意: 当需要编写多个catch分支时,切记小类型应该放在大类型的前面。)

3.异常的抛出

基本概念

在某些特殊情况下有些异常不能处理或者不便于处理时,就可以将该异常转移给该方法的调用者,

这种方法就叫异常的抛出。当方法执行时出现异常,则底层生成一个异常类对象抛出,此时异常代码后续的代码就不再执行。

语法格式

访问权限 返回值类型 方法名称(形参列表) throws 异常类型,异常类型,...{ 方法体; }

如:public void show() throws IOException{}

4.自定义异常

基本概念:例如:当需要在程序中表达年龄不合理的情况时,而Java官方又没有提供这种针对性的异常,此时就需要 程序员自定义异常加以描述。

五.易错知识

       无论只执行了try还是也执行了catch 都会执行finally   在返回结果前执行finally。


    public static void main(String[] args) {
        int test = test();
        System.out.println("test = " + test); //2

    }
    // 无论只执行了try还是也执行了catch 都会执行finally   在返回结果前执行finally
    public static int test() {
        try {
            int[] arr = new int[5];
            System.out.println(arr[5]);
            return 0;
        } catch (ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
            return 1;
        } finally {
           return 2; // 提交结束方法并返回数据
        }
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值