亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

違例的限制

2019-11-18 13:19:43
字體:
來源:轉載
供稿:網友

  覆蓋一個方法時,只能產生已在方法的基礎類版本中定義的違例。這是一個重要的限制,因為它意味著與基礎類協同工作的代碼也會自動應用于從基礎類衍生的任何對象(當然,這屬于基本的OOP概念),其中包括違例。
  下面這個例子演示了強加在違例身上的限制類型(在編譯期):
  
  //: StormyInning.java
  // Overridden methods may throw only the
  // exceptions specified in their base-class
  // versions, or exceptions derived from the
  // base-class exceptions.
  
  class BaseballException extends Exception {}
  class Foul extends BaseballException {}
  class Strike extends BaseballException {}
  
  abstract class Inning {
   Inning() throws BaseballException {}
   void event () throws BaseballException {
    // Doesn't actually have to throw anything
   }
   abstract void atBat() throws Strike, Foul;
   void walk() {} // Throws nothing
  }
  
  class StormException extends Exception {}
  class RainedOut extends StormException {}
  class PopFoul extends Foul {}
  
  interface Storm {
   void event() throws RainedOut;
   void rainHard() throws RainedOut;
  }
  
  public class StormyInning extends Inning
    implements Storm {
   // OK to add new exceptions for constrUCtors,
   // but you must deal with the base constructor
   // exceptions:
   StormyInning() throws RainedOut,
    BaseballException {}
   StormyInning(String s) throws Foul,
    BaseballException {}
   // Regular methods must conform to base class:
  //! void walk() throws PopFoul {} //Compile error
   // Interface CANNOT add exceptions to existing
   // methods from the base class:
  //! public void event() throws RainedOut {}
   // If the method doesn't already exist in the
   // base class, the exception is OK:
   public void rainHard() throws RainedOut {}
   // You can choose to not throw any exceptions,
   // even if base version does:
   public void event() {}
   // Overridden methods can throw
   // inherited exceptions:
   void atBat() throws PopFoul {}
   public static void main(String[] args) {
    try {
     StormyInning si = new StormyInning();
     si.atBat();
    } catch(PopFoul e) {
    } catch(RainedOut e) {
    } catch(BaseballException e) {}
    // Strike not thrown in derived version.
    try {
     // What happens if you upcast?
     Inning i = new StormyInning();
     i.atBat();
     // You must catch the exceptions from the
     // base-class version of the method:
    } catch(Strike e) {
    } catch(Foul e) {
    } catch(RainedOut e) {
    } catch(BaseballException e) {}
   }
  } ///:~
  
  在Inning中,可以看到無論構建器還是event()方法都指出自己會“擲”出一個違例,但它們實際上沒有那樣做。這是合法的,因為它答應我們強迫用戶捕捉可能在覆蓋過的event()版本里添加的任何違例。同樣的道理也適用于abstract方法,就象在atBat()里展示的那樣。
  “interface Storm”非常有趣,因為它包含了在Incoming中定義的一個方法——event(),以及不是在其中定義的一個方法。這兩個方法都會“擲”出一個新的違例類型:RainedOut。當執行到“StormyInning extends”和“implements Storm”的時候,可以看到Storm中的event()方法不能改變Inning中的event()的違例接口。同樣地,這種設計是十分合理的;否則的話,當我們操作基礎類時,便根本無法知道自己捕捉的是否正確的東西。當然,假如interface中定義的一個方法不在基礎類里,比如rainHard(),它產生違例時就沒什么問題。
  對違例的限制并不適用于構建器。在StormyInning中,我們可看到一個構建器能夠“擲”出它希望的任何東西,無論基礎類構建器“擲”出什么。然而,由于必須堅持按某種方式調用基礎類構建器(在這里,會自動調用默認構建器),所以衍生類構建器必須在自己的違例規范中聲明所有基礎類構建器違例。
  StormyInning.walk()不會編譯的原因是它“擲”出了一個違例,而Inning.walk()卻不會“擲”出。若答應這種情況發生,就可讓自己的代碼調用Inning.walk(),而且它不必控制任何違例。但在以后替換從Inning衍生的一個類的對象時,違例就會“擲”出,造成代碼執行的中斷。通過強迫衍生類方法遵守基礎類方法的違例規范,對象的替換可保持連貫性。
  覆蓋過的event()方法向我們顯示出一個方法的衍生類版本可以不產生任何違例——即便基礎類版本要產生違例。同樣地,這樣做是必要的,因為它不會中斷那些已假定基礎類版本會產生違例的代碼。差不多的道理亦適用于atBat(),它會“擲”出PopFoul——從Foul衍生出來的一個違例,而Foul違例是由atBat()的基礎類版本產生的。這樣一來,假如有人在自己的代碼里操作Inning,同時調用了atBat(),就必須捕捉Foul違例。由于PopFoul是從Foul衍生的,所以違例控制器(模塊)也會捕捉PopFoul。
  最后一個有趣的地方在main()內部。在這個地方,假如我們明確操作一個StormyInning對象,編譯器就會強迫我們只捕捉特定于那個類的違例。但假如我們上溯造型到基礎類型,編譯器就會強迫我們捕捉針對基礎類的違例。通過所有這些限制,違例控制代碼的“健壯”程度獲得了大幅度改善(注釋③)。
  
 ?、郏篈NSI/ISO C++施加了類似的限制,要求衍生方法違例與基礎類方法擲出的違例相同,或者從后者衍生。在這種情況下,C++實際上能夠在編譯期間檢查違例規范。
  
  我們必須熟悉到這一點:盡管違例規范是由編譯器在繼續期間強行遵守的,但違例規范并不屬于方法類型的一部分,后者僅包括了方法名以及自變量類型。因此,我們不可在違例規范的基礎上覆蓋方法。除此以外,盡管違例規范存在于一個方法的基礎類版本中,但并不表示它必須在方法的衍生類版本中存在。這與方法的“繼續”頗有不同(進行繼續時,基礎類中的方法也必須在衍生類中存在)。換言之,用于一個特定方法的“違例規范接口”可能在繼續和覆蓋時變得更“窄”,但它不會變得更“寬”——這與繼續時的類接口規則是正好相反的。

上一篇:捕獲所有違例

下一篇:創建自己的違例

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产久一一精品| 久久久久久久久久久人体| 国产精品成人一区二区三区吃奶| 成人h视频在线观看播放| 国产成人亚洲综合91精品| 亚洲视频视频在线| 国产成人精品综合| 色噜噜国产精品视频一区二区| 日韩av在线免费观看一区| 高清一区二区三区四区五区| 在线亚洲午夜片av大片| 成人国产精品久久久| 欧美精品videossex性护士| 欧美老妇交乱视频| 91中文字幕一区| 国产亚洲欧美aaaa| 欧美主播福利视频| 日本久久精品视频| …久久精品99久久香蕉国产| 成人黄色中文字幕| 欧美日韩性视频| 成人精品一区二区三区| 91久久国产精品91久久性色| 国产免费一区二区三区香蕉精| 久久久精品一区二区三区| 深夜福利亚洲导航| 亚洲午夜未删减在线观看| 黄色精品一区二区| 成人黄色午夜影院| 欧美成人久久久| 欧美高清自拍一区| 亚洲精品日韩在线| 日韩一级裸体免费视频| 亚洲自拍偷拍第一页| 亚洲福利在线视频| 伊人激情综合网| 欧美成人精品激情在线观看| 欧美黑人极品猛少妇色xxxxx| 国产一区二区三区在线观看网站| 亚洲香蕉av在线一区二区三区| 欧洲成人在线观看| 欧美成人精品h版在线观看| 久久99久久99精品免观看粉嫩| 亚洲国产成人精品久久久国产成人一区| 精品久久久久久亚洲国产300| 日韩精品在线影院| 国产精品视频久久久久| 在线一区二区日韩| 欧美精品videosex极品1| 久久精品久久久久久国产 免费| 日韩在线观看免费av| 中文字幕亚洲一区| 欧美裸体男粗大视频在线观看| 欧美激情久久久| 国产亚洲综合久久| www.xxxx欧美| 国产精品福利无圣光在线一区| 久久国产精品亚洲| 日韩欧美在线视频免费观看| 国产成人福利网站| 久久视频免费在线播放| 日韩美女主播视频| 久久99精品国产99久久6尤物| 青青在线视频一区二区三区| 91免费电影网站| 一本一道久久a久久精品逆3p| 亚洲aⅴ男人的天堂在线观看| 正在播放亚洲1区| 欧美疯狂做受xxxx高潮| 亚洲精品自在久久| 亚洲电影免费观看| 欧美日韩中文字幕日韩欧美| 色琪琪综合男人的天堂aⅴ视频| 57pao成人国产永久免费| 欧美精品手机在线| 欧美激情一区二区三区在线视频观看| 亚洲精品视频播放| 久久亚洲精品网站| 亚洲jizzjizz日本少妇| 欧美中在线观看| 国产伦精品免费视频| 国产精品wwwwww| 一区二区三区四区在线观看视频| 色偷偷亚洲男人天堂| 日韩一二三在线视频播| 97婷婷大伊香蕉精品视频| 欧美午夜视频在线观看| 久久久久久久久久久免费| 欧美激情视频一区二区| 精品久久久久久久久久国产| 精品久久久久久久久久久久久久| 精品国产依人香蕉在线精品| 国产精品视频在线播放| 国产视频丨精品|在线观看| 亚洲成人免费在线视频| 国产丝袜高跟一区| 日韩欧美国产高清91| 欧美肥臀大乳一区二区免费视频| 午夜剧场成人观在线视频免费观看| 一本大道久久加勒比香蕉| 欧美高清videos高潮hd| 色婷婷成人综合| 国产精品成人国产乱一区| 久久精品久久精品亚洲人| 欧美视频国产精品| 欧美伦理91i| 国内免费久久久久久久久久久| 一区二区三区四区精品| 亚洲免费中文字幕| 国产999在线| 欧美精品免费在线观看| 国产美女被下药99| 久久精品欧美视频| 日韩精品在线视频美女| 久久人人爽人人爽人人片av高清| 久久亚洲精品国产亚洲老地址| 欧美激情第1页| 日韩在线一区二区三区免费视频| 久热精品视频在线观看一区| 欧美激情在线视频二区| 亚洲va久久久噜噜噜久久天堂| 国内精品一区二区三区| 国产日韩欧美综合| 精品动漫一区二区| 国产91精品视频在线观看| 国产精品日韩专区| 欧美日韩性视频在线| 日本精品va在线观看| 亚洲最大的av网站| 亚洲成人1234| 97涩涩爰在线观看亚洲| 国产最新精品视频| 国产99久久精品一区二区 夜夜躁日日躁| 蜜臀久久99精品久久久无需会员| 在线看片第一页欧美| 久久久久久久激情视频| 欧美激情小视频| 亚洲一区二区免费| 久久精品国产成人精品| 亚洲香蕉在线观看| 永久免费看mv网站入口亚洲| 日韩av免费在线| 久久乐国产精品| 国产精品国产三级国产专播精品人| 国产精品电影网站| 深夜福利91大全| 国产在线视频91| 欧美精品激情在线观看| 亚洲精品电影久久久| 久久综合久久八八| 一区二区三区四区精品| 国语自产精品视频在线看抢先版图片| 668精品在线视频| 欧美极品在线视频| 亚洲综合视频1区| 久久九九热免费视频| 最近2019年中文视频免费在线观看| xvideos亚洲| 久久久www成人免费精品张筱雨| 亚洲丁香久久久| 中文字幕av一区二区三区谷原希美| 中文字幕最新精品| 成人精品一区二区三区电影免费| 亚洲成人免费网站|