try-catch使用的透彻解析

try-catch的通透解析

我们都知道在写程序时代码有时候会存在异常,那我们就需要对有可能发生的异常进行处理,尤其是初学者,就比较容易疑惑异常应该怎么被处理。

在Java中,处理异常的方式主要有两种:使用try-catch语句块和通过方法签名声明可能抛出的异常。

  1. try-catch语句块

    有开发经验的人都知道,try-catch语句块处理异常的方式是比较常见的,其中将你要书写的可能会发生异常的代码写在try块中,在catch块中书写对异常处理逻辑,示例看下面

    package excetion;
    
    public class ExceptionDemo {
    
        public static void main(String[] args) {
    
            try {
                //try块的作用主要就是用来发现代码是否抛出异常,如果抛出异常则执行catch块中的代码逻辑
                int a = 2/0;
            }catch (ArithmeticException e) {
    
                //当try块中的代码抛出ArithmeticException 异常类型时,则执行该逻辑
                System.out.println("程序报错了");
                System.out.println("异常类型为:" + e);
    
            }catch (ArrayIndexOutOfBoundsException e) {
    
                //当try快中的代码抛出ArrayIndexOutOfBoundsException 该异常类型时,则走该方法逻辑;
                throw new ArrayIndexOutOfBoundsException(e.getMessage());
    
            }catch (RuntimeException e) {
    
                //当抛出RuntimeException 异常类型时执行该逻辑
                throw new RuntimeException(e.getMessage());
    
            }finally {
                System.out.println("总会执行的地方");
            }
        }
    }
    
    
    

    注意点:

    1、catch块中的异常类型书写排序方法:异常的子类应该写在异常的父类前面,要不然直接把RuntimeException写在最前面,由于他的作用范围很广,容易导致后面定义的异常类型相关逻辑不会被执行。

    2、throw 关键字和 return具有一样的作用,都会结束当前方法,即使try-catch后面还有代码,也不会继续执行了,finally除外

    3、如果没有使用throw抛出异常,那么程序将会继续执行try-catch 之后的代码

    4、finally块中的代码为总会执行的代码块,不管报什么异常都会执行的,通常用于处理一些流的释放等逻辑。

  2. 方法签名声明异常

    通过throws来在方法签名中声明异常,该方式是抛出可能会发生的异常,与throw的不同之处是throw抛出一个具体的异常,与try-catch相比,throws处理异常的方法比较简介易于代码的梳理

    //throws可以抛出多个异常类型
        public void throwsTest() throws ArrayIndexOutOfBoundsException , ClassNotFoundException,Exception {
    
        }
    
  3. 疑问

    很多人都会对处理异常有一个关键的疑问,就是抛出的异常交给谁处理了?

    代码抛出的异常如果没有被捕获,则由该方法的调用者进行处理,层层传递,一直到JVM层,然后终止程序,如果一个方法抛出异常后,并且该方法的调用者有使用try-catch进行处理,那么则会走catch块中的逻辑,如果catch块中存在 throw或者return 方法,则会终止程序,并且抛出异常,如果没有使用那两个关键字,例如使用log.error()进行打印异常,则try-catch块的后续代码还会继续执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值