閱讀775 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《數據結構與抽象:Java語言描述(原書第4版)》一P.2.3 斷言

本節書摘來華章計算機《數據結構與抽象:Java語言描述(原書第4版)》一書中的第1章 ,第1節,[美]弗蘭克M.卡拉諾(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 羅得島大學  新英格蘭理工學院 辛運幃 饒一梅 譯 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。

P.2.3 斷言

斷言(assertion)是一個關於程序邏輯的某些方法的事實的語句。可以將它看作值為真的布爾表達式,或者至少在某些點應該為真。例如,前置條件和後置條件是方法開始前及結束後關於條件的斷言。如果有一個斷言為假,則程序一定有錯。
可以將斷言作為注釋放在代碼中。例如,如果在方法定義的某些地方,你知道變量sum應該是正的,則可以寫如下的注釋:

這樣的注釋用來說明並不太明晰的某些邏輯。另外,斷言為你指明調試期間需要精確檢查的代碼位置。
自測題4 假定你有一個正整數數組。下列語句查找數組中的最大整數。在下列循環中if語句之後,應該寫一個什麼樣的斷言來當作注釋?
image

斷言語句(assert statement)。Java不僅能讓你寫注釋當斷言,還能使用assert語句強製執行斷言,如
image

如果保留字assert後麵的布爾表達式為真,則語句什麼也不做。如果它為假,則發生斷言錯誤(assertion error),程序中斷執行。顯示如下的錯誤信息:
image

你可以在assert語句後添加第二個表達式來進一步說明這條錯誤信息。第二個表達式必須表示一個值,而在錯誤信息中它是作為字符串顯示的。例如,語句
image

當sum≤0時在錯誤信息中添加了sum的值。比如,錯誤信息可能是
image

默認情況下,在程序執行時禁用assert語句。所以,程序完成後可以將assert語句留在程序中,而不會浪費運行時間。當執行程序時,如果想讓assert語句執行,就必須要啟用assert語句。如何啟用它們依賴於編程環境。

注:程序中的斷言明示必須為真的邏輯。在Java中,可以使用一條assert語句寫一個斷言。它的格式如下:
image

如果第一個表達式為假,則可選的第二個表達式的值將出現在錯誤信息中。

程序設計技巧:使用assert語句是發現程序邏輯錯誤的簡單有效的方法。除了可用於這個目的之外,留在程序中的斷言還能向修改或擴展程序的人闡明你的邏輯。記住,Java會忽略assert語句,除非程序使用者指定了其他的選項。
程序設計技巧:調試時使用assert語句,能使方法強製滿足前置條件。但是,assert語句不能替代if語句。應該將assert語句作為程序設計的輔助手段,而不是程序邏輯的一部分。

最後更新:2017-06-26 14:32:01

  上一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一P.3 Java接口
  下一篇:go  《數據結構與抽象:Java語言描述(原書第4版)》一P.2.2 前置條件和後置條件