最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于java涉及父子類的異常詳解

 更新時(shí)間:2016年09月07日 10:09:33   投稿:jingxian  
下面小編就為大家?guī)硪黄趈ava涉及父子類的異常詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

java中的異常涉及到父子類的問題,可以歸納為一句話:子類的構(gòu)造函數(shù)拋出的異常必須包含父類的異常,子類的方法可以選擇拋出“范圍小于等于”父類的異?;虿粧伋霎惓!?/p>

1. 為什么構(gòu)造函數(shù)必須拋出包含父類的異常?

在《thingking in java》中有這么一段話:

異常限制:當(dāng)覆蓋方法時(shí),只能拋出在基類方法的異常說明中列出的那些異常

異常限制對(duì)構(gòu)造器不起作用,你會(huì)發(fā)現(xiàn)StormyInning的構(gòu)造器可以拋出任何異常,而不必理會(huì)基類構(gòu)造函數(shù)所拋出的異常。然而因?yàn)楸仨殬?gòu)造函數(shù)必須以這樣或那樣的方式被調(diào)用,子類構(gòu)造函數(shù)的異常說明必須包含基類構(gòu)造器的異常說明

這段話起初一開比較繞,但是嘻嘻看一遍就會(huì)明白:

首先,異常說明只針對(duì)覆蓋方法,而構(gòu)造函數(shù)明顯不在這個(gè)范圍,所以子類構(gòu)造函數(shù)可以拋出任何異常,而不用顧及父類構(gòu)造函數(shù)所拋出的異常。但是在new 一個(gè)子類對(duì)象的時(shí)候,父類構(gòu)造函數(shù)一定會(huì)被調(diào)用,所以子類構(gòu)造函數(shù)調(diào)用的對(duì)應(yīng)的父類構(gòu)造函數(shù)所拋出的異常就必須考慮在內(nèi),此時(shí)又因?yàn)椤白宇悩?gòu)造函數(shù)無法捕獲父類構(gòu)造函數(shù)所拋出的異常(后面會(huì)提)”,所以子類構(gòu)造函數(shù)必須拋出這個(gè)異常。

class SomeException extends Exception{} 
 
class TheOtherException extends Exception{} 
 
class BaseC 
{ 
  public BaseC()throws SomeException{} 
   
  public BaseC(int a)throws TheOtherException{} 
} 
 
class SubC extends BaseC 
{ 
  public SubC() throws SomeException //如果不拋出異常就會(huì)報(bào)錯(cuò) 
  { 
    super(); //由于調(diào)用的基類的默認(rèn)構(gòu)造函數(shù), 所以要拋出SomeException 
   //super(37) ; //如果將super()替換成這里,就必須拋出TheOtherException 
  } 
   
}

2. 為什么子類構(gòu)造函數(shù)無法捕獲父類構(gòu)造函數(shù)所拋出的異常?

 因?yàn)樽宇惾绻胍东@父類拋出的異常,就必須顯示地調(diào)用super() ; 或者super(xxx...); 然而super()和this()這些都有一個(gè)特性, 就是必須將他們放在第一行, 這與try{}catch{}相矛盾, 所以無法捕獲

3. 當(dāng)子類繼承的父類和接口存在相同的方法名時(shí),這時(shí)的處理方式就必須遵循異常限制。

class SomeException extends Exception{} 
 
class TheOtherException extends Exception{} 
 
interface InterF 
{ 
  public void function()throws TheOtherException; 
} 
class BaseC 
{ 
  public void function()throws SomeException{} 
} 
 
class SubC extends BaseC implements InterF 
{ 
  //此時(shí)只能選擇不拋出異常 
  public void function(){} 
   
  //報(bào)錯(cuò):Exception SomeException is not compatible with throws clause in InterF.function() 
  // public void function()throws SomeException{} ; 
  //報(bào)錯(cuò):Exception TheOtherException is not compatible with throws clause in BaseC.function() 
  // public void function()throws TheOtherException{} ; 
}

4. 為什么子類只能拋出在基類方法的異常說明中列出的那些異常?

因?yàn)樽宇惔嬖谙蛏限D(zhuǎn)化成父類的可能性,如果允許子類隨意拋出異常的話,那么向上轉(zhuǎn)化成父類時(shí),該方法的接口(姑且這么叫吧)會(huì)變成父類的方法類型,此時(shí)問題來了,子類會(huì)拋出異常,而父類卻無法對(duì)該異常做出處理,所以為保證對(duì)象的可替換型,強(qiáng)制要求“只能拋出在基類方法的異常說明中列出的那些異?!?。

這里所說的“那些異?!边€包括這些異常的子異常!

5. 這一點(diǎn)不知道算不算,也許是我比較愚鈍吧,我在看的時(shí)候想了好久才明白過來,姑且記下來吧。

class SomeException extends Exception{} 
 
class BaseC 
{ 
  public void function()throws SomeException{}//如果這里拋出的異常是一個(gè)運(yùn)行時(shí)異常子類就可以不對(duì)其進(jìn)行異常處理 
} 
 
class SubC extends BaseC 
{<BR>//這兩個(gè)function()所進(jìn)行的super.function()的都屬于正常的函數(shù)調(diào)用,不屬于異常處理的范圍, 但是這個(gè)函數(shù)本身要符合異常處理的規(guī)范! 
/* 
  public void function()throws SomeException 
  { 
    super.function(); 
  } 
*/
  public void function() 
  { 
    try
    { 
      super.function() ; 
    } 
    catch(SomeException e) 
    { 
      e.printStackTrace(); 
    } 
  } 
}

以上這篇基于java涉及父子類的異常詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java同步鎖的正確使用方法(必看篇)

    java同步鎖的正確使用方法(必看篇)

    下面小編就為大家?guī)硪黄猨ava同步鎖的正確使用方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 如何為L(zhǎng)ogback日志添加唯一追蹤ID

    如何為L(zhǎng)ogback日志添加唯一追蹤ID

    本文介紹了如何為L(zhǎng)ogback日志添加唯一追蹤ID,以便在測(cè)試和調(diào)試時(shí)更容易定位報(bào)錯(cuò)信息,通過創(chuàng)建過濾器和修改配置文件,可以在每個(gè)請(qǐng)求的日志中添加唯一的ID,并將其返回給前端,這樣,當(dāng)用戶反饋報(bào)錯(cuò)時(shí),開發(fā)人員可以根據(jù)ID快速定位和解決問題
    2024-12-12
  • SpringBoot整合ElasticSearch實(shí)踐

    SpringBoot整合ElasticSearch實(shí)踐

    本篇文章主要介紹了SpringBoot整合ElasticSearch實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • dubbo泛化調(diào)用使用及原理示例解析

    dubbo泛化調(diào)用使用及原理示例解析

    這篇文章主要為大家介紹了dubbo泛化調(diào)用使用及原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java的字符串常量池StringTable詳解

    Java的字符串常量池StringTable詳解

    這篇文章主要介紹了Java的字符串常量池StringTable詳解,JVM為了提高性能和減少內(nèi)存開銷,在實(shí)例化字符串常量的時(shí)候進(jìn)行了一些優(yōu)化,為 了減少在JVM中創(chuàng)建的字符串的數(shù)量,字符串類維護(hù)了一個(gè)字符串池,需要的朋友可以參考下
    2023-11-11
  • IDEA連接MySQL數(shù)據(jù)庫的4種方法圖文教程

    IDEA連接MySQL數(shù)據(jù)庫的4種方法圖文教程

    IDEA是一種流行的Java開發(fā)工具,可以方便地連接MySQL,這篇文章主要給大家介紹了關(guān)于IDEA連接MySQL數(shù)據(jù)庫的4種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • SpringMVC 參數(shù)綁定相關(guān)知識(shí)總結(jié)

    SpringMVC 參數(shù)綁定相關(guān)知識(shí)總結(jié)

    這篇文章主要介紹了SpringMVC 參數(shù)綁定相關(guān)知識(shí)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用SpringMVC,感興趣的朋友可以了解下
    2021-03-03
  • Java去掉數(shù)字字符串開頭的0三種方法(推薦)

    Java去掉數(shù)字字符串開頭的0三種方法(推薦)

    下面小編就為大家?guī)硪黄狫ava去掉數(shù)字字符串開頭的0三種方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot優(yōu)雅接收前端請(qǐng)求參數(shù)的詳細(xì)過程

    SpringBoot優(yōu)雅接收前端請(qǐng)求參數(shù)的詳細(xì)過程

    這篇文章主要介紹了SpringBoot如何優(yōu)雅接收前端請(qǐng)求參數(shù),我們可以通過@RequestParm注解去綁定請(qǐng)求中的參數(shù),將(查詢參數(shù)或者form表單數(shù)據(jù))綁定到controller的方法參數(shù)中,本文結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • spring boot中的條件裝配bean的實(shí)現(xiàn)

    spring boot中的條件裝配bean的實(shí)現(xiàn)

    這篇文章主要介紹了spring boot中的條件裝配bean的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論

芦溪县| 玉山县| 灵山县| 岳阳县| 治多县| 龙海市| 偃师市| 永济市| 东乌| 肃北| 荆州市| 扎兰屯市| 文成县| 建德市| 姚安县| 三明市| 东乌| 晋中市| 全南县| 南丹县| 甘泉县| 宁明县| 吕梁市| 赣州市| 临武县| 嘉峪关市| 南江县| 大兴区| 正蓝旗| 灵山县| 阳西县| 天全县| 红安县| 湄潭县| 抚顺市| 巴里| 轮台县| 定西市| 义马市| 灯塔市| 腾冲县|