你会处理Java中的异常吗??

一、什么是异常

java中的异常是指Java程序在运行时可能出现的错误或非正常情况。
例:

public class test {
    public static void main(String[] args) {
        int ret = divide(4,0);
        System.out.println(ret);
    }
    public static int divide(int x,int y){
        int n = x / y;
        return n;
    }
}

在这里插入图片描述

二、运行时异常与编译时异常

1、编译时异常

  1. 在Exception类中,除了RuntimeException类以外,其他子类都是编译时异常。Java编译器会对编译时异常进行检查,如果出现这类异常就必须对其进行处理,否者的话程序无法通过编译
  2. 编译异常的处理
    (1)、使用 try… catch 语句对异常进行捕获处理。
    (2)、使用 throws 关键字声明抛出异常,由调用者对其异常进行处理。

2、运行时异常

  1. RuntimeException类及其子类都是运行时异常,运行时异常是在程序运行时由Java虚拟机自动进行捕获处理的,Java编译器不会对异常进行检查。
    这类异常程序可以通过编译,但是运行中会报错。
  2. 运行异常分类
运行时异常描述
ArithmeticException算数异常
IndexOutOfBoundsException索引越界异常
ClassCastExceptin类型转换异常
NullPointerException空指针异常
NumberForMatException数字格式化异常

三、异常处理及语法

关键字功能描述
try放置可能引发异常的代码块
catch后面对应异常类型和一个代码块,该代码快用于处理这种类型的异常
finally主要用于回收在try代码块里打开的物理资源
throw用于抛出一个实际异常,它可以单独作为语句抛出来一个具体的异常对象
throws用在方法签名中,用于声明该方法可能抛出的异常

1、try…catch语句

try{
        代码块
    }catch(ExceptionType e){
        e.printStackTrace();
        代码块
    }

在这里插入图片描述

2、finally语句

在程序中,有时候希望一个语句无论程序是否发生异常都要执行,这时可以使用finally。

try{
        代码块
    }catch(ExceptionType e){
        e.printStackTrace();
        代码块
    }fianlly{
        代码块
    }

在这里插入图片描述
在这里插入图片描述

3、throw关键字

  1. 使用情况
    (1)编译异常:
    第一:在try代码块里使用throw关键字抛出异常,通过try代码块捕获异常。
    第二:在一个有throws声明的方法中使用throw关键字抛出异常,把异常交给该方法 调用者处理。
    (2)运行异常:
    程序既可以显式使用try…catch语句捕获并处理该异常,也可以把该异常交给方法的调用者处理
  2. 注意
    (1).必须写在方法体的内部。
    (2).抛出对象必须是Exception或其子类。
    (3).若为RuunTimeException或其子类,可直接交由JVM。
    (4).当try当中没有没有抛出异常的时候,检测就会报错。
    (5).异常一旦抛出,其后代码不会执行。

4、异常抛出的顺序关系

  1. try中
    同一时间,不会抛出两个及其以上的异常。
    try里哪个先抛出异常,先报哪一个,与catch中所写异常的顺序无关
  2. catch中
    catch代码块中抛出Exception,那么需要放在其子类异常的后面,否则会报错。
    若Exception被捕获,那么后面的异常就不会有异常了。
    在这里插入图片描述

5、异常的处理流程

在这里插入图片描述

四、自定义异常类

  1. 自定义异常通常会继承自 Exception 或者 RuntimeException.
  2. 继承自 Exception 的异常默认是受查异常.
  3. 继承自 RuntimeException 的异常默认是非受查异常.
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小琚子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值