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也可以不作处理。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值