JAVA的异常与契约思想

JAVA的异常与契约思想

异常分为编译时异常,运行时异常

  • throwable
    • error
    • exception
      • RuntimeException
      • Exception

java把异常封装成类的形式展示,如果出现了异常java会根据问题所描述的异常类,创建一个对象实例,然后抛出给上一级,

异常抛出到jvm虚拟机后将异常出现的位置和和错误的原因打印在控制台

  • throw想异常对象抛出给调用者
  • throws仅仅对方法进行声明,告知调用者方法存在异常

spring框架的事务默认是RuntimeException才进行回滚

何时抛出受检异常,何时抛出运行时异常

严格的表述:

​ 运行时异常: 代表bug、不可抗力因素,总得有人来背锅,例如除零异常,空指针,或者网络波动类的异常就需要网络管理员来解决

​ 受检的异常: 代表一种业务场景,比如抛出IOException,来代表此文件可能存在肯不存在

 /*
    * date格式化的方式有很多中,格式化的字符格式也不是约定俗成的
    * 是制作这个类的人规定的,没有按照规范格式化有可能是格式化的一种
    * 所以应该向上抛出一个受检的异常来满足契约
    * */
        Date parse = new SimpleDateFormat().parse("");

简单的表述:

​ 只需满足业务场景即可,两种异常任选一种抛出,不再过于强调抛出受检异常来代表一种业务场景的可能性

    /*
    * 输入的字符串不能被解析也算是业务逻辑的一种
    * 但是因为此方法的功能是将字符串转换为数字
    * 传输的字符串是数字,这是一种约定俗称的规则
    * 所以如果传输的不是字符串就不再抛出受检的异常
    * */
        int i = Integer.parseInt("adfaf");

契约思想

接口契约

​ --为了沟通协作,需要在调用接口是规定的非常明确,大家都遵守这个规则

  • 前置条件: 一般是指对参数的要求(规定好调用此接口,掺入的参数需要满足什么条件)

  • 后置条件: 调用接口后返回达成的状态,(例如此接口承诺实现插入操作,运行结束后一定要实现此操作,如果不能实现,就需要返回信息代表未实现)

​ —实现接口契约,就需要使用返回的参数和抛出的异常还有注解来说明此接口的作用,还有可能发生的业务场景.如果此接口的调用方没有按照规定传参,就可以直接抛出RuntimeException来表示调用方的错误

​ —如果接口调用者在运行接口过程中发送了RuntimeExcepion的子异常,也就是JDK抛出的异常就说明是接口的制作者的错误

以此方法来方便规定责任.尽量做到只要满足我接口的入参条件,我就返回调用方需要的数据或者抛出一个我已经声明好的业务异常.这才是个好的接口作者.

为什么是抛出异常而不是使用boolean或者int类型作为返回值的状态码?

首先,boolean类型只能涵盖两种状态,不能真实的表达出是因为何种原因导致了程序出现异常,而且不能即返回boolean又返回参数.

其次,在c语言的时代会使用int类型作为返回值代表状态,首先因为因为在c语言中可以使用数值类型进行判断,其次现在java也提供多样性——异常的方式来具体描述出接口的功能与业务逻辑

http状态码,也是符合契约思想的
  • 2xx: 代表程序顺利运行
  • 3xx: 代表抛出声明的异常
  • 4xx: 代表调用方的错误
  • 5xx: 代表接口作者的错误

最近得到的一些浅显的见解,欢迎大家随时指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值