Java异常详解

Java异常

1、异常中最大的父类Throwable

image-20220531213802395

Throwable可以分为两种:

  • Error
  • Exception:
    • 运行时异常(非受检异常)
    • 非运行时异常(受检异常)
  1. Error错误:Error是程序无法处理的错误,它是由jvm产生抛出的,比如OutOfMemoryError,ThreadDeath等,这些异常发生时,jvm会选择终止程序执行
  2. Exception:是程序本身可以处理的异常,
    • 运行时异常:都是RuntimeException类及子类,如NullPointerException(空指针),IndexOutOfBoundException(数组越界)等,这些异常可以选择捕获处理,或者可以不处理
    • 非运行时异常:(受检异常)时除了RuntimeException以外的异常,类型上属于Exception类,从程序语法角度这些异常必须要进行处理,如果不处理,程序不饿能通过编译,如IOException,SQIException

2、try,catch,finally三条语句注意的问题

  1. try,catch,finally均不能单独使用,三者可以组合使用,组合方式:try…catch, try…catch…finally, try…finally ,其中catch可以有一个或者多个,finally语句最多只能有一个

  2. 三个语句块中变量的作用域为代码块,分别独立的不能互相访问,如果要在三块中都可以访问,就把变量定义到这些块外边

  3. 如果存在多个catch块,最多只会匹配一个异常类且执行该catch块代码,而不会在执行其他catch块,且匹配顺序是从上到下,最多只会匹配一个异常类,也就是说也可以一个异常类都不执行

  4. catch捕获的异常类不能重复,且先捕获子类异常再捕获父类异常

  5. 无论try中语句有没有问题,finally中的语句一定执行,finally为程序提供统一的出口,保证程序状态的统一管理,通常情况下finally中进行资源的关闭清除工作

注意:

try cath的优先级高于return,如果cath里面有return,那么也会等try cath这个整体执行完才行,返回结果看最后的return关键字所在的位置

package com.exception;

public class Test {
    public static void main(String[] args) {
        int[] a=new int[5];

        try {
            for (int i = 0; i <10 ; i++) {
                a[i]=i;
            }
            //空指针
        }catch (ArrayIndexOutOfBoundsException e){
            //弹出出错的地方
            System.out.println("1");
            e.printStackTrace();
            //访问异常,数组越界
        }catch (NullPointerException e){
            System.out.println("2");
            e.printStackTrace();
            //无论有错与否,finally最终执行
        } finally {
            System.out.println("都能执行");
        }

        System.out.println("---------------");
    }
}

3、final,finally,finalize的各作用

  1. final:用于定义常量的关键字
  2. finally:异常中总能执行的代码块
  3. finalize() :垃圾回收,该方法是系统调用,不用程序员手动调用

4、throws关键字

  1. 定义一个方法的时候可以使用throws关键字声明,表示该方法时不处理该异常,而是交给方法调用者处理该异常
  2. 在定义方法时,throws关键字可以程序员自主选择使用,如果使用了,那么说明该方法时不处理该异常的
  3. 如果主方(main)也使用throws关键字,那么就意味着主方法也不处理异常,最后留给jvm处理,jvm处理异常就是终止程序
  4. throws抛出一个子类异常,调用该方法的调用者可以不必须处理该异常

注意:

  • throw关键字:是可以自定义异常,也就是抛异常,抛出的时候是一个异常类的对象

5、throws和throw的区别

throws:

  1. 用在方法声明之后,跟着的是异常类名

  2. 可以跟多个异常类,用逗号隔开

  3. 表示抛出异常,有该方法的调用者处理

  4. throws表示出现异常的一种可能性,并不一定会发生异常

throw:

  1. 用在方法体内,跟着的是异常对象
  2. 只能抛出一个异常对象
  3. 表示抛出异常,有方法体内语句处理
  4. throw抛异常是一定会发生,并不是一种可能

代码表示:

package com.test;

public class Throw {

    //throws Exception 代表该方法出现异常时不做处理
    public void deposit(int num1,int num2) throws Exception
    {
        // RuntimeException()是运行时异常最大的父类
        int sum;
        if(num2==0){
            throw new RuntimeException("可以自定义一个异常抛出:除数不能为0");
        }else{
           sum=num1/num2;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值