`

异常的限制

 
阅读更多

java 程序声明异常时,父类的某个方法声明了异常的抛出,那么子类需要声明异常的抛出吗?针对这个问题,本篇文章将应对各种情况作出分析。

    ●  父类有无参构造函数且未声明任何异常的抛出
          子类可以在任何一个构造函数中声明抛出任何异常。因为构造子类前只会调用父类的无参构造函数,构造父类时不会出现异常,子类的任何一个构造函数是否抛出异常都无所谓。

    ●  父类有有参的构造函数
          不管它是否声明了异常的抛出,子类无需写同样的构造函数,写了也不用声明抛出同类异常,因为构造子类对象前只会调用父类的无参的构造函数。

    ●  父类有无参构造函数且声明了异常抛出
          子类必须在它的任何一个(子类构造前会调用父类的无参构造函数,由于父类声明了异常,因此在子类的构造函数中要么继续声明抛出,要么使用 try catch 块。若父类声明的是 RuntimeException,那么子类可以不声明异常的抛出)构造函数中声明异常的抛出,且抛出的异常类型至少和父类异常类型一致,也可以父类异常 类型的父类,同时还可以抛出其它类型的异常。

    ●  父类的方法未声明任何异常的抛出
          子类覆写此方法时不能声明任何异常(除了 RuntimeException)的抛出。

 

Parent P = new Child();
/** 
 * 由于 Parent 声明调用 hello 方法时不会出现异常,可是 Child 覆写 hello 方法时却声明需要抛出异常。
 * 根据多态,以下的调用将调用 Child 的 hello 方法(需捕捉异常),而调用者却是 Parent,Parent 声明
 * 没有异常。因此暴露給我们的是 Parent 引用,我们不会去捕捉异常,这样就矛盾了,所以子类覆写父类时
 * 不能抛出异常。
 */
p.hello();

   ●  父类的方法声明了异常(RuntimeException)的抛出
          子类可以不做异常抛出的声明,也可以声明任何 RuntimeException 的抛出。

    ●  父类的方法声明了异常(非 RuntimeException)的抛出
          子类可以不做异常抛出的声明。一旦声明了,那么其异常类型至多和父类声明的异常类型一样,包括可以是父类异常类型的子类。

 

Parent p = new Child();
/**
 * 由于 Parent 声明调用 hello 方法时调用者需要捕捉异常。Child 覆写 hello 方法时未声明异常的抛出。
 * 根据多态,以下的调用将调用 Child 的 hello 方法(不需捕捉异常),调用者是 Parent,Parent 声明需要
 * 捕捉异常。因此暴露給我们的是 Parent 引用,尽管调用的是 Child 的 hello 方法(不需要捕捉异常),我们
 * 在下面程序段捕捉异常也不矛盾,Parent 声明异常只是告知在调用 hello 时有可能会发生异常,子类实现不
 * 出现异常与这并不矛盾。
 */
try {
  p.hello();
} catch (Parent 类声明的异常类型 e) {
  ...
}

/**
 * 由于 Parent 声明调用 hello 方法时调用者需要捕捉异常。Child 覆写 hello 方法时声明了异常的抛出。
 * 根据多态,以下的调用将调用 Child 的 hello 方法(需捕捉异常),调用者是 Parent,Parent 声明需要
 * 捕捉异常。因此暴露給我们的是 Parent 引用,我们要在以下程序段捕捉 Parent 类声明的异常类型,因此
 * 子类(Child) 覆写时声明的异常类型必须是父类声明异常类型的子类(子集)
 */
try {
  p.hello();
} catch ((Parent 类声明的异常类型,Child 类声明的异常类型应该是 e 的子类或者就是e) e) {
  ...
}

 ●  子类继承父类的同时还实现了某一接口
          若接口和父类有同样的函数签名,声明抛出的异常类型不同,只有一种情况允许这样:子类覆写该方法,不声明任何异常抛出。若不这样覆写的话,将不会通过编译。接口中的方法在父类中不存在,子类实现方法时就把接口当作父类。

分享到:
评论

相关推荐

    java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类

    java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类java 文件名大小限制异常类...

    试论java编程中异常处理的方法与技巧.pdf

    因此,通常情况下我们将检查型的异常转换为运行时异常抛出,这样就可以将指定的异常限制在指定的模块中,比如将SQLException放入到DAO层,这样就可以把具有明确的遗产信息的运行时异常抛出到客户层。 3.6 减少不必...

    java 文件名称超长限制异常类 java 文件名称超长限制异常类

    java 文件名称超长限制异常类 java 文件名称超长限制异常类java 文件名称超长限制异常类 java 文件名称超长限制异常类java 文件名称超长限制异常类 java 文件名称超长限制异常类java 文件名称超长限制异常类 java ...

    论文研究-现货市场异常波动下股指期货交易限制对市场质量的影响分析.pdf

    论文研究-现货市场异常波动下股指期货交易限制对市场质量的影响分析.pdf, 通过计算机仿真构建了基于投资者策略的跨市场金融平台,提出了异常波动下交易限制措施对市场...

    C和C++中的异常处理

    1.异常和标准 C 对它的支持 2. Microsoft 对异常处理方法的扩展 ...12. unexpected()的实现上固有的限制 13. 异常安全 14. 模板安全 15. 模板安全(续) 16. 指导方针 17. C++异常和 Visual C++ SEH 的混合使用

    基于java涉及父子类的异常详解

    Java中的构造函数并不受到覆盖方法的异常限制。这意味着子类构造函数可以抛出任何类型的异常,而不必考虑父类构造函数可能抛出的异常。然而,当创建子类对象时,父类的构造函数会被自动调用。由于子类构造函数不能...

    基于异常检测的网络安全技术分析.pdf

    但同时,异常检测也存在一些限制,如计算复杂度高、需要大量数据等。 8. 未来发展方向 未来,异常检测在网络安全技术中的发展方向将包括异常检测算法的改进、网络攻击检测的自动化和智能化、异常检测在物联网中的...

    保证Java精确异常的指令调度技术

    为了解决上述问题,本文提出了一种新的算法,旨在打破Java精确异常的要求对指令调度的限制,同时又能保证异常发生时精确异常的要求不被破坏。该算法的核心思想是在确保满足精确异常要求的前提下,尽可能地提高指令级...

    VC异常处理实例有界面

    5. **SEH的限制** - **不跨平台**:SEH是Windows特有的,其他操作系统不支持。 - **不兼容C++异常**:虽然两者可以共存,但直接处理C++异常可能会导致问题,需要小心设计。 6. **与C++异常的配合** VC6允许同时...

    自定义异常

    用户密码的合法化验证,要求密码由4到6个数字组成,若长度不落在这个范围或不是由数字组成,抛出自己的异常。

    linux异常测试脚本合计

    在Linux系统中,异常测试是确保软件或服务在面临异常情况时仍能稳定运行的关键环节。这个名为"linux异常测试脚本合计"的项目显然关注的是利用shell脚本来模拟和测试各种异常状况,以评估系统或应用的健壮性和容错...

    JAVA实验十一 异常处理与集合类

    在实验中,原本使用数组存储银行客户和账号的限制被`ArrayList`取代,这样就可以根据需要增加或减少客户和账号的数量,而无需预先确定其大小。 4. **Account类代码修改**: `Account`类是所有账户的抽象基类,包含...

    unity 捕捉异常和移动设备崩溃Android

    在Unity游戏开发中,确保应用在遇到错误时能够稳定运行并提供有效的反馈至关重要。"unity 捕捉异常和移动设备崩溃Android"这个主题...同时,对移动设备的特性和限制有深入理解,将有助于构建更加健壮和用户友好的游戏。

    金融系统常用异常处理

    4. 故障隔离:将异常影响范围限制在最小,避免故障扩散。 5. 问题分析与修复:根据日志信息定位问题,修复异常源。 6. 回复服务:确认修复后,重新启动服务或部分服务,确保业务正常运行。 7. 后期优化:对异常进行...

    Java常见异常大全.pdf

    这些异常通常属于JVM层面的异常,或者是由程序逻辑错误和资源限制等因素引起的。 了解和掌握这些异常,对于编写健壮的Java程序至关重要。开发人员需要根据异常的类型和上下文信息来合理处理这些异常,或者通过抛出...

    TWT2014解除时间限制补丁程序

    用户在使用此补丁时,应了解可能存在的法律风险,并且要遵循正确的安装步骤,以免导致软件功能异常。同时,这也反映出软件开发者与用户之间的动态平衡,一方面开发者通过时间限制鼓励用户购买完整版,另一方面,用户...

    Oracle 存储过程异常处理.docx

    * DUP_VAL_ON_INDEX(ORA-00001):对于数据库表中的某一列,该列已经被限制为唯一索引,程序试图存储两个重复的值 * VALUE_ERROR(ORA-06502):在转换字符类型、截取或长度受限时,会发生该异常 * STORAGE_ERROR...

    c,c++异常处理

    在C++中,“异常”这个词的含义较为广泛,它既可以指标准异常处理机制中的异常,也可以指微软特定的结构化异常处理(SEH)中的异常。为了清晰起见,作者对“异常”进行了分类。 - **标准异常**: 这些异常是C++标准中...

Global site tag (gtag.js) - Google Analytics