Java接口的异常设计
一、问题的提出
疑惑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接口的异常设计的更多相关文章
- Java接口的幂等性设计
转载:https://www.cnblogs.com/jack87224088/p/8688948.html 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用 ...
- C#调用java接口报“Fault occurred while processing”异常问题
服务在通常项目中总是要用到的C#的webservice.wcf,还有第三方的,比如java服务.一般来说调用都不会有什么问题,因为服务的标准都是一样的.要注意的就是:1.参数个数匹配:2.参数类型和返 ...
- JAVA异常设计原则
异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性.可维护性.健壮性都起到至关重要. JAVA根据用处的不同,定义了两类异常 * Checked Exception: Exc ...
- python基础--接口与归一化设计、封装、异常、网络编程
1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部 ...
- 初探设计:Java接口和抽象类何时用?怎么用?
今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- java.io.InvalidClassException 异常解决, 实现Serializable接口的注意事项
解决方案: 在类中显式指定 private static final long serialVersionUID = 42L; 类实现序列化接口, 进行序列化反序列化的时候, 抛出 java.io.I ...
- java接口自动化(二) - 接口测试的用例设计
1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...
- java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...
随机推荐
- 轻量级web服务器lighttpd的编译及配置(for x86-linux)
转自:http://blog.163.com/ljf_gzhu/blog/static/131553440201211522317367/ 备注: PC Linux:Ubuntu-10.10 Linu ...
- 区块链核心技术:拜占庭共识算法之PBFT
PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法.该算法是Miguel Castro (卡斯特罗)和Barbara Liskov(利斯科夫 ...
- OpenCV图像金字塔
图像金字塔 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 pyrUp 和 pyrDown 对图像进行向上和向下采样. 原理 Note 以下内容来自于Bradski和Kaehler的大作: ...
- 如何限制jenkins的任务在某个节点上执行
1.首先给节点打标签,一个节点可以打多个标签,中间使用空格分开 2.其次在每个任务上标记执行的标签位置,这样这个任务就在包含这些标签的节点上执行 3.通过这个方法限制的任务,只会跑在指定节点上,即是当 ...
- iOS:quartz2D绘图(显示绘制在PDF上的图片)
quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来.在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)lo ...
- ISP图像调试工程师——自动对焦(熟悉3A算法)
https://wenku.baidu.com/view/40ec4a14fc4ffe473368ab96.html
- 数据库建模软件ERStudio-表关系建模详解
ERStudio是优秀的数据库建模软件,它不仅可以建立表.视图等模型,还可以建立多表间各种关系的模型,另外还可以根据模型生成表到数据库,下面具体讲解一下它的表关系建模. 1. 首先讲一下怎么建立表关系 ...
- 突破防盗链机制:使用referrer-killer
在开发it博客汇的过程中遇到一个难题:很多图片链接设置了防盗链机制,从我的网站请求图片会返回403错误,但直接在浏览器中打开图片的url时却又正常. 使用fiddler抓包发现,从我的网站请求图片会带 ...
- HDU 3726 Graph and Queries treap树
题目来源:HDU 3726 Graph and Queries 题意:见白书 思路:刚学treap 參考白皮书 #include <cstdio> #include <cstring ...
- 代码练习之 登陆 PHP会话控制 session cookie
log.html <html> <head><title>Home Page</title></head> <body> < ...