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

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

JML起步--使用JML 改進你的Java程序(4)

2019-11-18 14:02:45
字體:
來源:轉載
供稿:網友

  來自:http://www-106.ibm.com/ 作者:Joe Verzulli


異常行為


前面給出的行為規范要求調用peek() 和 pop()方法時隊列不能為空,但其實當隊列空時是有可能會調用這兩個方法的。假如發生這種情況,這兩個方法就會拋出一個NoSUChElementException.異常。我們必須修正我們前面制定的行為規范,答應這種可能的發生。在這種情況下,我們要使用JML的exceptional_behavior語句。



到目前,我們的行為規范還是以public normal_behavior打頭的。這里normal_behavior要害字表示這是一個正常行為,方法不會拋出任何異常。使用public exceptional_behavior標記可以用來描述拋出異常的行為。下面的代碼段顯示了類PRiorityQueue中peek()方法的行為規范中的異常部分:



代碼段9 exceptional_behavior標記





/*@

@ public normal_behavior

@ requires ! isEmpty();

@ ensures elementsInQueue.has(esult);

@ also

@ public exceptional_behavior

@ requires isEmpty();

@ signals (Exception e) e instanceof NoSuchElementException;

@*/

/*@ pure @*/ Object peek() throws NoSuchElementException;





像我們前面看到的所有例子一樣,這個規范的第一部分也是以public normal_behavior開頭,表示正常行為;不同的是,這個規范還有第二部分,以public exceptional_behavior開頭,描述了異常行為。與normal_behavior 語句一樣, exceptional_behavior 語句也有一個 requires 語句。這個requires 語句表示當拋出signals 語句中所列的異常時必須滿足的條件。在上面的例子中,假如isEmpty()方法返回真的話,peek()就會拋出一個NoSuchElementException異常。



signals 語句


signals 語句是形如signals(E e) R的語句,其中E是Exception類本身或其一個子類,R是一個表達式。JML 用如下方式解釋一個signal 語句:假如有一個類型為E的異常拋出的話,就檢查是否為R真。假如是,就執行既定規范;否則,拋出一個unchecked exception(譯者注:unchecked exception又叫做RuntimeException,關于這兩個概念,請參考java語言中關于異常的描述),用以表示我們的程序代碼違反了exceptional_behavior規范的要求。



上面peek()方法中的signals語句的意思是假如隊列為空,就拋出一個NoSuchElementException異常。假如peek()方法在運行中拋出不是NoSuchElementException的其它異常的話,那么JML就會把這當成一個錯誤,因為e instanceof NoSuchElementException不是true。假如你既想處理NoSuchElementException異常又想處理其它運行期異常,我們可以修改上面的signals語句,改為signals (NoSuchElementException e) true; 。這個意思是說,假如peek()方法拋出一個NoSuchElementException異常的話,那條件true必須為真,而true是一個常量,總是可以滿足條件,所以對于NoSuchElementException異常的處理可以正常進行。不過我們這里并沒有提及關于其它異常的信息,而peek()方法可以拋出它的簽名(譯者注:方法的簽名是指,方法聲明的各個部分,具體來說,是方法名稱、參數類型、返回類型和拋出異常的總稱)答應的任何異常。它的簽名說它可以拋出NoSuchElementException異常,這就意味著它既可以拋出NoSuchElementException異常,又可以拋出RuntimeException。



假如隊列中存在一些元素而且當我們調用peek()方法時還是拋出一個NoSuchElementException異常(或者其他異常),JML運行期斷言檢查就會拋出一個unchecked exception,這表示正常的后置條件失敗。



結論


本文簡單介紹了JML的概念,說明了它對面向對象系統的分析和設計的貢獻,通過實例演示了如何在Java程序中使用JML標記。你可以從下面所列的資源中下載本文中所使用的完整的代碼,還可以從中找到更多的關于JML的信息。



你可以使用開源的JML編譯器來編譯你含有JML標記的代碼,所生成的類文件會在運行時自動檢查JML規范。假如你的程序沒有實現規范中規定的事情,JML就會拋出一個unchecked exception 來說明你的程序違反了哪一條規范。這可以幫助我們捕捉程序中的bug,而且能保證我們的代碼與文檔(JML格式的文檔)高度一致。



JML運行期斷言檢查編譯器是第一個JML工具,其他相關工具還有jmldoc和jmlunit等等。Jmldoc與javadoc工具相似,不同的是它在生成的Html格式文檔中包含JML規范;jmlunit可以成生一個Java類文件測試的框架,它可以讓你很方便地使用JUnit工具測試含有JML標記的Java代碼。你還可以從下面所列的資源中找到其他關于JML各個方面的相關內容。



在此請答應我向 Gary Leavens 和 Yoonsik Cheon表示深深的謝意,是他們幫我解決了一部分關于JML的疑問并且審閱了你所看到的這篇文章。



資源

下載本文中所用的源代碼 。
Sourceforge是JML規范、開源JML工具如JML編譯器、jmldoc、jmlunit以及相關信息的主頁。
PriorityQueue 接口和 BinaryHeap 類是開源項目 雅加達通用集合組件(JCCC)的一部分。
Gary T. Leavens、Albert L. Baker和Clyde Ruby的 "JML設計起步" (愛荷華州立大學計算機科學系,2003年1月) 是對JML的更為具體地介紹。
Bertrand Meyer在面向對象軟件構造,第二版一書中關于通過契約(JML最基本的概念)進行設計的討論(Prentice Hall, 1997)。
Granville Miller在介紹面向對象系統建模中關于 Java建模 部分(developerWorks, 2002)。
Eric Allen在"Diagnosing Java code: Assertions and temporal logic in Java programming" (developerWorks, July 2002)一書中討論了一些斷言檢查限制的問題。
Kyle Brown在"A stepped approach to J2EE testing with SDAO" (developerWorks, March 2003)一文中討論了如何把模擬數據對象與分層測試聯合起來。
Java程序設計的各個方面的信息請參考IBM developerWorks Java專區。


<完>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品中文字幕在线2019| 在线播放日韩欧美| 国产精品免费观看在线| 91香蕉电影院| 国产精品久久久一区| 中文字幕亚洲欧美日韩高清| 一区二区三区www| 久久99热这里只有精品国产| 日韩一区二区在线视频| 91在线观看免费观看| 蜜臀久久99精品久久久无需会员| 51色欧美片视频在线观看| 91国内揄拍国内精品对白| 91高清视频免费观看| 欧美黑人xxxⅹ高潮交| 国产视频精品一区二区三区| 成人精品视频久久久久| 国产精品高潮呻吟久久av黑人| 日韩精品免费综合视频在线播放| 精品欧美国产一区二区三区| 上原亚衣av一区二区三区| 亚洲国产精品高清久久久| 亚洲性猛交xxxxwww| 日韩免费高清在线观看| 国内精品久久久久影院优| 精品视频在线导航| 日韩在线免费观看视频| 欧美在线视频网站| 亚洲天堂第一页| 亚洲a∨日韩av高清在线观看| 成人免费网站在线| 尤物yw午夜国产精品视频明星| 欧美日韩精品在线| 欧美成人国产va精品日本一级| 2019中文字幕在线免费观看| 91av成人在线| www.久久久久久.com| 狠狠躁夜夜躁久久躁别揉| 色综合久久悠悠| 国产欧美日韩视频| 精品中文字幕视频| 日韩视频免费在线观看| 庆余年2免费日韩剧观看大牛| 亚洲精品丝袜日韩| 亚洲国产高清高潮精品美女| 成人黄色片在线| 久久91精品国产91久久跳| 欧美在线不卡区| 久久成人精品一区二区三区| 久久理论片午夜琪琪电影网| 国产第一区电影| 国产69精品久久久久99| 97热在线精品视频在线观看| 成人观看高清在线观看免费| 亚洲视频视频在线| 精品高清美女精品国产区| 精品视频偷偷看在线观看| 国产精品青草久久久久福利99| 日韩精品视频免费| 亚洲高清久久久久久| 欧美日韩福利电影| 亚洲国产精品成人一区二区| 亚洲欧美精品中文字幕在线| 国产精品成人观看视频国产奇米| 欧美日韩免费观看中文| 日韩经典中文字幕在线观看| 国产精品视频免费在线观看| 日本三级韩国三级久久| 亚洲人成在线观看网站高清| 久久久久久久久久久网站| 国产日韩欧美自拍| 亚洲国产另类 国产精品国产免费| 欧美激情第1页| 91午夜在线播放| 九九热r在线视频精品| 欧美在线免费观看| 亚洲成年人在线| 亚洲wwwav| 亚洲最大在线视频| 久久久国产成人精品| 国产日韩欧美日韩大片| 国产美女精品免费电影| 中文字幕日韩专区| 久久久精品久久久久| 欧美性xxxx极品hd满灌| 欧美激情区在线播放| 亚洲精品99久久久久中文字幕| 性夜试看影院91社区| 国产精品亚洲视频在线观看| 精品国产一区二区三区四区在线观看| 亚洲老板91色精品久久| 亚洲成人网在线观看| 丝袜美腿精品国产二区| 久久综合免费视频影院| 欧美精品在线观看| 欧美黄色www| 国产亚洲人成网站在线观看| 欧美日韩激情网| 亚洲国产天堂久久国产91| 日韩精品视频在线观看网址| 中文字幕欧美日韩| 久久久久久有精品国产| 欧美电影《睫毛膏》| 日韩在线免费视频观看| 欧美另类第一页| 亚洲精品一区中文| 欧美成人h版在线观看| 在线播放日韩欧美| 热re91久久精品国99热蜜臀| 国产精品久久久久久久久免费看| 亚洲aaaaaa| 亚洲高清福利视频| 日韩av成人在线观看| 国产综合久久久久| 国产在线观看精品| 国内揄拍国内精品| 久久精品99久久香蕉国产色戒| 久久精品一区中文字幕| 亚洲色图日韩av| 欧美日韩国产在线| 福利视频一区二区| 亚洲欧美国产va在线影院| 亚洲电影免费观看高清完整版| 欧美日韩精品中文字幕| 亚洲国产精品系列| 91在线播放国产| 亚洲国产精品高清久久久| 91精品久久久久久综合乱菊| 欧美日韩xxxxx| 国产香蕉精品视频一区二区三区| 国产精品69久久| 日韩欧美亚洲国产一区| 欧美电影在线播放| 97国产精品视频| 91av在线免费观看| 日韩精品www| 日韩电影中文字幕在线观看| 国语自产在线不卡| 国产精品嫩草视频| 日av在线播放中文不卡| 国产精品久久一区| 秋霞av国产精品一区| 亚洲精品v欧美精品v日韩精品| 国产色视频一区| 成人激情视频在线| 精品久久久久久久久久久久久| 欧美亚洲伦理www| 久久九九精品99国产精品| 97成人精品视频在线观看| 久久影院资源网| 国产成人综合一区二区三区| 国产91精品视频在线观看| 久久精品在线视频| 国产精品对白刺激| 成人欧美在线观看| 成人天堂噜噜噜| 91免费看片在线| 国产午夜精品理论片a级探花| 岛国av一区二区| 欧洲亚洲女同hd| 国产中文字幕日韩| 中文字幕欧美日韩在线| 久久精品国产清自在天天线| 欧美自拍视频在线观看|