Java的异常处理机制

优雅的代码离不开优雅的异常处理。                                       ————小欢子

正如引言,一个好的异常处理,可以极大提升代码的可读性和可维护性。因此十分有必要将Java的异常处理摸清吃透。

Java的异常处理机制都来源一个父类Throwable,Throwable下有两个重要的子类,分别是Error和Exception,也就是我们常说的错误和异常,众所周知,Error是处理不了的,一旦出现程序就会终止(这里让我再研究研究,因为不确定是程序终止还是线程终止)。而Exception则是可以被catch处理,之后程序依旧会正常运行。

图1 Java异常类层次结构

Error

Error出现后我们是无法处理的,因此我们要尽量避免Error的出现。常见的Error有内存溢出OutOfMemoryError(OOM),StackOverFlow(SOF)栈溢出等。

Exception

Error出现后我们无法处理,因此我们只能尽量避免Error的出现。但是Exception则相反,Exception是可以被捕获的,捕获之后我们可以做处理,然后继续执行后续代码,而且有时的Exception是我们有意而为之(可以帮助我们更好的掌控代码和避免风险)。Exception一般分为Checked Exception和Unchecked Exception。

  • Checked exception:顾名思义,受检查的异常。若有该类异常,程序在编译时就会报错,如IO异常
  • Unchecked exception:不受检查的异常,可正常编译,只有在运行时才能被发现。该类异常有一个很重要的类,RuntimeException,其下有众多“耳熟能详”的异常,如空指针异常,索引越界异常
图2 最常见的异常分类

Exception的捕获

我们通常是使用try。。。catch来进行Exception的捕获与处理。

实验1

public static void main(String[] args) {

        int[] arr = new int[10];
        try {
            arr[10] = 0;
        } catch (Exception e) {
            System.out.println("抓到你啦: " + e.toString());
        }
        System.out.println("继续执行");
        System.out.println("hello world");
    }

实验1运行结果

抓到你啦: java.lang.ArrayIndexOutOfBoundsException: 10
继续执行
hello world

通过实验1的运行结果我们可以得出,Exception是可以被捕获的,捕获之后可以进行相应的逻辑处理,而且不影响后续代码的执行。

自定义Exception

自定义的Exception更有利于我们把控代码,可以根据我们自己的逻辑需求来自定义(妈妈再也不担心我的代码是屎山了)。我就写个小小的Demo吧。

自定义Exception:

public class MyException extends RuntimeException {

}

实验2

public static void main(String[] args) {

        try {
            sayHello();
        }catch (Exception e){
            System.out.println("捕获到了:"+e.toString());
            System.out.println("但我不处理");
        }
        System.out.println("就是玩");
    }

    public static void sayHello(){

        throw new MyException();
    }

实验2的运行结果

捕获到了:MyException
但我不处理
就是玩

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值