一、问题的提出
 
疑惑1:在设计接口的时,对于接口方法何时需要声明抛出受检异常或者说所有的接口方法最后都声明抛出受检异常?
以下是代码片段:
 public interface xx{
  public void method();
  }
  public interface xx{
  public void method() throws Exception;
  }
 
疑惑2:如果需要声明抛出受检异常,那是抛出一个抽象的异常呢;还是抛出多个具体的异常?
  a,抛出抽象的异常。如果是这样那是抛出自定义抽象异常呢,还是直接抛出
Exception?
  自定义抽象异常:
以下是代码片段:
 public interface xx{
  public void method() throws CustomAbstractException;
  }

直接抛出Exception:
以下是代码片段:
   public interface xx{
  public void method() throws Exception;
  }
   b,抛出具体异常:

以下是代码片段:
 public interface xx{
  public void method() throws
SpecificException1,SpecificException2,...;
  }
  ps:如果要抛出具体异常那就要考虑全部可能的实现类会抛出的异常,我想这样几乎不可能吧。
############################################################
  关于异常,这里还有一个重要的知识点:
   1、不能放大接口可能会抛出的异常:Java 中子类重写父类的方法时声明抛出异常不能比父类范围大
,同理:实现类中的实现方法声明抛出的异常不能比接口或者抽象类中的范围大。
   2、不能缩小接口的可视性
  
3、异常在向上抛得过程中,如果main方法也无法处理,jvm就会终止程序。
  二、问题的解决方案
   接口就是约定,异常是返回结果之一。
   使用不同的异常区分不同错误的情况,在方法声明中抛出所以可能的异常,即抛出具
体异常,只有在具体的实现类(非接口实现类或接口只有一个实现类的情况)中比较可行;在接口有多个不同的实现类时,不同的实现又可能抛出不同的异常,这样
就无法在接口声明中将这些具体异常全部声明出来了,这时候使用一个抽象的异常就比较可行了。可是如果这样的话,我觉的使用接口的地方,就无法明确到底会出
现哪些具体的异常了。这样貌似异常的使用原则(尽量指定具体的异常)有些相违背了。

还有如果在接口中声明了抛出自定义的抽象异常,那么在实现类中将一些如例如网络可能中断,未知的程序错误等等,这种处理成运行时异常,是将其转译呢,还是直接抛到上异常。

对于系统性异常:例如网络可能中断,未知的程序错误等等,这种处理成运行时
异常,不作声明比较好,反正接收的人也没办法做任何处理

对于有业务性的错误:例如取款时,余额不够、权限不够、超出最大取款限制等
等,这类错误,最好,每个场景,定义一个异常,在申明中逐一说明,总之,异
常是帮助使用者了解、处理不同的错误场景。使用者可以根据错误类型的不同,
给用户提供不同的处理方式和流程。当然,如果你提供给用户的只是提示信息,
就没必要再区分类型了
异常处理方式上,还有一个办法是对异常编码,那就只需要一种类型了,类似
SqlException。两种方式都可行,重点是要让约定更加明确、翔实

Java接口的异常设计的更多相关文章

  1. Java接口的幂等性设计

    转载:https://www.cnblogs.com/jack87224088/p/8688948.html 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用 ...

  2. C#调用java接口报“Fault occurred while processing”异常问题

    服务在通常项目中总是要用到的C#的webservice.wcf,还有第三方的,比如java服务.一般来说调用都不会有什么问题,因为服务的标准都是一样的.要注意的就是:1.参数个数匹配:2.参数类型和返 ...

  3. JAVA异常设计原则

    异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性.可维护性.健壮性都起到至关重要. JAVA根据用处的不同,定义了两类异常     * Checked Exception: Exc ...

  4. python基础--接口与归一化设计、封装、异常、网络编程

    1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部 ...

  5. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  6. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  7. java.io.InvalidClassException 异常解决, 实现Serializable接口的注意事项

    解决方案: 在类中显式指定 private static final long serialVersionUID = 42L; 类实现序列化接口, 进行序列化反序列化的时候, 抛出 java.io.I ...

  8. java接口自动化(二) - 接口测试的用例设计

    1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...

  9. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

随机推荐

  1. etcd,Docker问题汇总

    单节点etcd publish error 正在愉快的进行jenkins流程,突然发现etcd连接不上去了.重新reboot后发现日志publish error Oct :: k8s-master e ...

  2. JS的jsoneditor,用来操作Json格式的界面;json-editor用来根据json数据生成界面

    1.jsoneditor https://github.com/josdejong/jsoneditor https://jsoneditoronline.org/ 效果如下: 2.json-edit ...

  3. iOS:iOS开发系列–打造自己的“美图秀秀”(下)

    来源: KenshinCui 链接:http://www.cnblogs.com/kenshincui/p/3959951.html 运行效果: 其他图形上下文 前面我们也说过,Quartz 2D的图 ...

  4. Shell学习:if语句 if -z -n -f -eq -ne -lt

    if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fitest.sh: line 14: sy ...

  5. (转)如何在maven环境中设置JVM参数

    有时候我们需要设定maven环境下的JVM参数,以便通过maven执行的命令或启动的系统能得到它们需要的参数设定.比如:当我们使用jetty:run启动jetty服务器时,在进行热部署时会经常发生:J ...

  6. 接口测试框架开发(三):maven+restAssured+Excel(jxl)+testng+extentreports的接口自动化

    1.http://www.cnblogs.com/lin-123/p/7151031.html 2.http://www.cnblogs.com/lin-123/p/7151046.html 3.ht ...

  7. 正则表达式匹配a标签或div标签

    这里以a标签为例 a标签的href var a='<P><A href=\'~abc/ccg/ab.jpg\' width="3">文字</A> ...

  8. 算法笔记_158:算法提高 逆序排列(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然后程序将把这个数组中的值按逆序重新存 ...

  9. win7 ARP 命令运行失败解决办法

    直接运行cmd,运行arp -d * ,arp -s会出现下面的错误提示: ARP 项删除失败: 请求的操作需要提升. ARP 项添加失败: 拒绝访问.或提示:ARP 项添加失败: 请求的操作需要提升 ...

  10. static、final修饰符、内部类

    static修饰符: static修饰符能够与属性.方法和内部类一起使用,表示静态的.类中的静态变量和静态方法能够与类名一起使用.不须要创建一个类的对象来訪问该类的静态成员. class Static ...