欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA异常

程序员文章站 2022-05-23 11:10:53
...

异常:在很多书籍中也将其称之为“违例”,意味着“例外”的,不正常的情况。

异常体系

JAVA异常

Error 和Exception

Error:错误。表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。

Exception:违例。表示需要捕捉或者需要程序进行处理的异常,它的出现是因为程序设计的而引起的问题,是程序可以处理的。

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。
可抛性的体现:就是这个体系中的类和对象都可以被throwsthrow两个关键字所操作。

throw 和throws

throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数名上。

编译时异常和运行时异常

异常分两种:

1.运行时异常(也叫做unChecked不受检查异常):Java.lang.RuntimeException(是Exception的子类),在运行时会出现的异常,编译器无法检查到。例如:空指针异常、角标越界异常等

2.编译时异常(也叫做checked受检查异常):Java.lang.Exception所有非RuntimeException的exception异常都是编译时异常。也称之为受检查异常,是编译过程中会被检查出的异常,一般来说编译器都会提示,也有部分是非代码逻辑错误而且IDE也无法提示的编译异常:例如IOException IO流操作异常,Socket绑定端口之类的异常,也是属于编译时异常哦。

需要注意的是:

方法体内抛出运行时异常不需要在方法上用throws声明,但是如果方法体内抛出编译时异常,则一定要在方法上用throws声明。

举个栗子

运行时异常:

 public Order queryByOrderNum(String orderNum) {
        if(StringUtils.isBlank(orderNum))
            //抛出运行时异常
            throw new RuntimeException("orderNum订单号不能为空!");
        return order;
    }

编译时异常

   public void read(String fileName) throws IOException {
        if(StringUtils.isBlank(fileName))
            //抛出编译时异常
            throw new IOException("文件不存在!");
    }

自定义异常的原则

根据编译时异常和运行时异常的特点:

编译时异常:抛出编译时异常的方法,必须将编译时异常声明在方法上。调用者必须处理异常(向上抛出或者try catch)。

运行时异常:抛出运行时异常的方法,可以将运行时异常声明在方法上也可以不声明。调用者可根据情况处理运行时异常,也可以不作处理(遇到异常中断程序)。

如果有一些异常你觉得很严重,需要方法的调用者在编码时期就给出解决方案的情况,使用编译时异常。

如果有一些异常,是可预测的,且这些异常出现之后无法继续执行任务,例如表单后台校验,用户输入的数据有问题,这种异常就是需要中断程序的异常,可以将其定义为运行时异常,调用者可根据需要来抛出或者try catch也可以不作处理。

编译时异常:调用者必须给出解决方案
运行时异常:调用者可根据需要给出解决方案,或者不去解决。