`
czpsailer
  • 浏览: 10439 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Java 接口的异常设计疑惑

    博客分类:
  • OO
阅读更多

疑惑1:在设计接口的时,对于接口方法何时需要声明抛出受检异常或者说所有的接口方法最后都声明抛出受检异常?
      
       public interface xx{
              public void method();
       }

       public interface xx{
             public void method() throws Exception;
       }

 

      
      
疑惑2:如果需要声明抛出受检异常,那是抛出一个抽象的异常呢;还是抛出多个具体的异常?

       a,抛出具体异常:

         public interface xx{
               public void method() throws SpecificException1,SpecificException2,...;
         }

         ps:如果要抛出具体异常那就要考虑全部可能的实现类会抛出的异常,我想这样几乎不可能吧。

       b,抛出抽象的异常。如果是这样那是抛出自定义抽象异常呢,还是直接抛出Exception?

         自定义抽象异常:

           public interface xx{
                public void method() throws CustomAbstractException;
           }

         直接抛出Exception:

           public interface xx{
                public void method() throws Exception;

           }

 

     大家说说看到底如何做比较合理?理由是什么?

 

分享到:
评论
6 楼 rrsy23 2009-11-12  
接口是好
但是 也要防止过度设计

业务系统 真的有必要接口都是 可以商榷的

适合简单才是缺憾中的完美
5 楼 zhxing 2009-11-12  
接口的受检异常是在你可以在上层进行恢复的情况下才向上抛的,如果接口产生的异常是不能恢复的,我建议是转换成运行期异常,然后在最上层(action 层) 进行统一拦截,然后进行友好的错误页面的跳转。
不然的话就算你catch 到接口的异常你也没什么办法处理,只能再向上抛了,这样在接口层和上层间的代码就多了很多try 的代码了。
当然像上面的je说的,接口异常也可以作为一种返回值的信号,具体错误,具体处理。。如果你对每个错误没精确的处理的话,抛出Exception 也没问题。。
以上纯属个人理解。。
4 楼 joachimz 2009-11-12  
czpsailer 写道
joachimz 写道
接口就是约定,异常是返回结果之一。

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

对于有业务性的错误,例如取款时,余额不够、权限不够、超出最大取款限制等等,这类错误,最好,每个场景,定义一个异常,在申明中逐一说明,总之,异常是帮助使用者了解、处理不同的错误场景。使用者可以根据错误类型的不同,给用户提供不同的处理方式和流程。当然,如果你提供给用户的只是提示信息,就没必要再区分类型了

异常处理方式上,还有一个办法是对异常编码,那就只需要一种类型了,类似SqlException。两种方式都可行,重点是要让约定更加明确、翔实



    我觉得对于使用不同的异常区分不同错误的情况,在方法声明中抛出所以可能的异常,只有在具体的实现类(非接口实现类或接口只有一个实现类的情况)中比较可行;在接口有多个不同的实现类时,不同的实现又可能抛出不同的异常,这样就无法在接口声明中将这些具体异常全部声明出来了,这时候使用一个抽象的异常就比较可行了。可是如果这样的话,我觉的使用接口的地方,就无法明确到底会出现哪些具体的异常了。这样貌似异常的使用原则(尽量指定具体的异常)有些相违背了。

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


是否需要使用抽象异常,与你的设计详细程度,接口特性都有关系。
如果你的接口是一个通用接口,你考虑更多的是灵活性与稳定性,当然选择定义一个通用的异常。但如果你是一个专用接口,尽量细化异常,枚举所有场景。设计必须考虑全部场景,实现的时候不会有更多场景,否则就是设计没有考虑完整。

运行时异常是否要处理的判断标准是,如果你不做任何处理,使用接口的人也无能为力。转译是多此一举,连catch都没必要
3 楼 czpsailer 2009-11-11  
joachimz 写道
接口就是约定,异常是返回结果之一。

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

对于有业务性的错误,例如取款时,余额不够、权限不够、超出最大取款限制等等,这类错误,最好,每个场景,定义一个异常,在申明中逐一说明,总之,异常是帮助使用者了解、处理不同的错误场景。使用者可以根据错误类型的不同,给用户提供不同的处理方式和流程。当然,如果你提供给用户的只是提示信息,就没必要再区分类型了

异常处理方式上,还有一个办法是对异常编码,那就只需要一种类型了,类似SqlException。两种方式都可行,重点是要让约定更加明确、翔实



    我觉得对于使用不同的异常区分不同错误的情况,在方法声明中抛出所以可能的异常,只有在具体的实现类(非接口实现类或接口只有一个实现类的情况)中比较可行;在接口有多个不同的实现类时,不同的实现又可能抛出不同的异常,这样就无法在接口声明中将这些具体异常全部声明出来了,这时候使用一个抽象的异常就比较可行了。可是如果这样的话,我觉的使用接口的地方,就无法明确到底会出现哪些具体的异常了。这样貌似异常的使用原则(尽量指定具体的异常)有些相违背了。

    还有如果在接口中声明了抛出自定义的抽象异常,那么在实现类中将一些如例如网络可能中断,未知的程序错误等等,这种处理成运行时异常,是将其转译呢,还是直接抛到上异常。
2 楼 LK.Bing 2009-11-11  
我认为,接口需要抛出异常的时候就抛出异常啊(好像等于没说...)
    接口方里抛出异常应该抽像好点,就是大范围的异常,那么实现这个接口的类方法就可以抛出比这个接口抛出的异常稍小的异常,因为不是每个实现类所抛出的异常都相同.
  这和继承类的方法异常一样,子类的方法抛出的异常不能大于父类方法的异常.(就是进化咯,子类比父类进化得高级一些,不能比父类的异常还多吧.)
1 楼 joachimz 2009-11-11  
接口就是约定,异常是返回结果之一。

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

对于有业务性的错误,例如取款时,余额不够、权限不够、超出最大取款限制等等,这类错误,最好,每个场景,定义一个异常,在申明中逐一说明,总之,异常是帮助使用者了解、处理不同的错误场景。使用者可以根据错误类型的不同,给用户提供不同的处理方式和流程。当然,如果你提供给用户的只是提示信息,就没必要再区分类型了

异常处理方式上,还有一个办法是对异常编码,那就只需要一种类型了,类似SqlException。两种方式都可行,重点是要让约定更加明确、翔实

相关推荐

    Java语言程序设计基础篇(Y.Daniel Liang 著)课后编程答案(全)

    Java语言程序设计基础篇是Y.Daniel Liang教授的一本经典教材,主要针对初学者,旨在教授Java编程的基础知识。本书涵盖了从语法基础到面向对象编程的重要概念,为读者提供了全面的学习路径。课后编程答案集是学习过程...

    java常见疑惑与陷阱

    ### Java常见疑惑与陷阱 #### 一、Java基础的常见陷阱 **1.1 不一样的数字的宽类型和窄类型** 在Java中,当我们处理不同的数值类型时,可能会遇到一些意料之外的行为。例如,当一个`byte`类型的数据与一个`int`...

    (官方)Java语言程序设计(原书第8版)基础篇和进阶篇复习题和编程题答案

    【Java语言程序设计复习题与编程题答案解析】 在学习Java这门强大的面向对象编程语言时,官方的《Java语言程序设计》第8版提供了深入的基础篇和进阶篇,帮助读者逐步掌握其核心概念和技术。这本书的复习题和编程题...

    Java语言程序设计进阶篇答案与代码

    这份"Java语言程序设计进阶篇答案与代码"资源将帮助你巩固以上知识点,通过实际代码示例加深理解,解决练习题疑惑,提升编程能力。学习过程中,你可以对照代码理解讲解,结合实际运行结果,加深对Java语言特性的掌握...

    Java语言程序设计基础篇课后答案

    课后答案对于初学者来说是极其宝贵的资源,可以帮助他们验证自己的理解,解决学习过程中的疑惑,从而更好地掌握Java编程的核心知识。 1. **Java语言简介**:Java是一种面向对象的、跨平台的编程语言,由Sun ...

    java语言程序设计基础篇课后答案

    Java语言程序设计基础篇的课后答案涵盖了编程学习的关键领域,包括语法、数据类型、控制结构、类与对象、异常处理、输入/输出(I/O)等。这些答案为初学者提供了深入理解Java编程概念的机会。 1. **Java语法**:Java...

    java项目设计与开发范例源码

    1. **Java基础知识**:源码中的项目通常会涉及到Java的基础语法,如变量、数据类型、运算符、控制结构(if语句、for循环、while循环)、类和对象、继承、多态、接口等。初学者可以借此了解和巩固这些基本概念。 2. ...

    Java程序设计PPT教程JAVA程序设计试卷及题库JAVA学习资料合集

    《Java程序设计》题目样例.docx提供了多种编程题目,这些题目通常会涵盖面向对象编程、异常处理、数据结构、IO流等方面,帮助学习者锻炼实际编程能力。同时,2012-2013《Java程序设计》试卷B卷.docx和试卷A卷则代表...

    java语言程序设计的答案

    这份"java语言程序设计的答案"涵盖了课程中的关键知识点,帮助学生解决课后练习中的疑惑。 在Java语言的学习过程中,理解和掌握基本语法是首要任务。这包括数据类型(如整型、浮点型、字符型和布尔型)、变量的声明...

    解决java中的疑惑

    在Java编程语言中,有很多细节和特性可能会...通过深入学习和实践,初学者可以逐渐克服这些疑惑,成为一名熟练的Java开发者。"JAVA解惑.pdf"这份文档很可能详细阐述了这些问题,建议仔细阅读,以便更好地理解Java编程。

    Java语言程序设计基础篇源代码

    4. **异常处理**:Java提供了异常处理机制,使得程序在遇到错误时可以优雅地处理。源代码中会展示try-catch-finally块的使用。 5. **集合框架**:Java集合框架是一系列接口和类的集合,用于存储和操作对象。如...

    java程序设计基础+进阶答案单双都有

    Java程序设计基础与进阶是学习Java编程的重要环节,涵盖了从基本语法到复杂概念的全面内容。本资源包含了基础篇和进阶篇的课后答案,对于初学者来说,是检验学习成果、解决疑惑的好帮手。不论是奇数题还是偶数题,...

    Java解惑 中文版

    本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更稳定、更高效的代码。 Java解惑部分涵盖了诸多主题,包括但不限于: 1. **内存管理**:Java的垃圾回收机制是其一大特色...

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    java编程思想练习答案 the think in Java Annotated Solution Guide

    《Java编程思想》是 Bruce Eckel 的经典之作,它深入浅出地介绍了Java这门强大的编程语言。...通过对照书本和答案,你可以独立完成练习,也可以查找疑惑,这对于学习和进阶Java编程都是非常有价值的资源。

    Thing in Java\Thinking in Java 3rd Edition英文版,书后答案及代码

    5. **异常处理**:Java使用try-catch-finally语句块来捕获和处理异常,提供了良好的错误报告机制。 6. **输入/输出流**:Java的I/O系统基于流的概念,包括文件操作、网络通信等。 7. **多线程**:Java内置对多线程...

    java解惑java解惑java解惑

    在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **Java基础** - **变量与数据类型**:Java支持基本数据类型(如int、double等)和...

    21天学通java(英文版).pdf格式

    在本书中,读者将逐步学习Java的基本语法、数据类型、控制结构、类与对象、接口、包、异常处理、输入输出流、集合框架、多线程、网络编程以及数据库连接等内容。此外,书中可能还包含了一些实际项目案例,以帮助读者...

    Java编程思想 Thinking in Java 课后习题答案

    2. **异常处理**:Java中的异常处理是程序健壮性的重要组成部分,习题可能会涉及try-catch-finally语句块,以及自定义异常的创建和抛出。 3. **集合框架**:Java集合框架是数据存储和管理的关键,包括ArrayList、...

    Java解惑(中文).pdf

    《Java解惑(中文)》是一本专门为Java开发者编写的指南书籍,旨在解决在实际编程过程中遇到的各种疑惑和难题。本书以中文语言呈现,使得国内的Java程序员能够更轻松地理解并应用其中的知识。通过阅读这本书,读者...

Global site tag (gtag.js) - Google Analytics