Time of Update: 2017-02-27
J2SE 1.5 ― 代號為“Tiger” ― 計劃在 2003 年年底發布,它將包括泛型型別(如在 JSR-14 原型編譯器中預先展示的那樣,現在可下載獲得)。在 第 1 部分中,我們討論了泛型型別的基礎知識,以及為什麼它們是對 Java 語言的一個重要且迫切需要的補充。我們還說明了為 Tiger
Time of Update: 2017-02-27
J2SE 1.5 - 代號為 Tiger - 計劃在 2003 年年底發布。我一直都熱衷於儘可能多地收集有關即將推出的新技術的預告資訊,因此我將撰寫一系列的文章,討論可從 V1.5 中獲得的新的和經過重組的特性,本文是第一篇。我特別想談談泛型型別並重點講述在 Tiger 中為了支援它們而進行的更改和調整。在許多方面,Tiger 肯定是迄今為止在 Java 編程方面(包括對源語言文法的重大擴充)所取得的最大進步。Tiger 中計划進行的最顯著的變化是添加泛型型別,正如在 JSR-14
Time of Update: 2017-02-27
在 上個月的專欄文章中,如果您掌握以下幾點的話,那麼您會明白,底層代碼的可用性不會成為問題:如何識別配置指令碼如何選擇允許哪種配置識別哪種環境要求黑箱可擴充性衡量可擴充性所帶來的構建複雜性當提供此擴充性給配置指令碼時,您 實際上正在構建一種語言。您還認識到,考慮到應用程式的黑箱可擴充性,使用 S-expression 是一種快速建立一種配置語言的有效手段。我們將在本文深入研究 S-expression,並提供了一個如何用這些 S-expression
Time of Update: 2017-02-27
對應於我們上一篇“ 診斷 Java 代碼”中所討論的透明盒可擴充性,黑盒可擴充性是指,在原始碼既不能查看也不能修改時,可以擴充軟體系統的方法。通常通過系統配置或使用特定於應用程式的指令碼語言來進行這樣的擴充。在本專題中,Eric Allen 討論了何時設計黑盒可
Time of Update: 2017-02-27
玻璃箱可擴充性是指這樣一種方式:軟體系統可在原始碼可以查看而不可以修改時被擴充 ― 它是黑箱設計(在這裡構建擴充時,不查看原始代碼)和開放箱設計(擴充代碼直接寫入到基礎代碼)的折衷。因為新的擴充直接建立在原始代碼基礎上,但不改動原始代碼,所以,玻璃箱設計或許是擴充一個軟體系統最有效、最安全的方法。在 診斷 Java 代碼的這一部分中,Eric Allen 詳述了上個月談及的玻璃箱可擴充性主題。讀完本文後,您將知道什麼時候使用玻璃箱,並將獲得一些如何?它的提示。隨著資訊處理任務(和與之相關的成本)
Time of Update: 2017-02-27
臆想實現重溫回想一下 上次介面的 臆想實現是一個合法的實現,但不滿足介面規範的某些未經檢查的方面。我們考慮一下下面的堆棧介面,以及許多未被其單獨的類型簽名捕獲的不變數:清單 1. 一個堆棧接public interface Stack { public Object pop(); public void push(Object top); public boolean isEmpty();}例如,請考慮我們希望任意堆棧實現都遵守的下列規則:如果一個對象 o 被壓進堆棧 s
Time of Update: 2017-02-27
一、概述Message Service是一種在分布式應用之間提供訊息傳遞服務的軟體,具有可靠、非同步、寬鬆結合、語言中立、平台中立的特點,而且通常是可配置的。它的實現原理是:對寄件者和接收者之間傳遞的訊息進行封裝,並在分布式訊息客戶程式結合的位置加上一個軟體處理層。Message Service為訊息的客戶程式提供了一個介面,這個介面隔離了底層的Message Service,使得各種不同的客戶程式能夠通過一個友好的編程介面方便地通訊。JavaMessage Service(Java
Time of Update: 2017-02-27
Java工具 + 生產力類庫中的類java.util.Random提供了產生各種類型隨機數的方法。它可以產生int、long、float、double以及Goussian等類型的隨機數。這也是它與java.lang.Math中的方法Random()最大的不同之處,後者只產生double型的隨機數。類Random中的方法十分簡單,它只有兩個構造方法和六個普通方法。構造方法:(1)public Random()(2)public Random(long
Time of Update: 2017-02-27
JDK 5.0為開發人員開發高效能的並發應用程式提供了一些很有效新選擇。例如, java.util.concurrent.lock 中的類 ReentrantLock 被作為 Java 語言中 synchronized 功能的替代,它具有相同的記憶體語義、相同的鎖定,但在競爭條件下卻有更好的效能,此外,它還有 synchronized 沒有提供的其他特性。這是否意味著我們應當忘記 synchronized ,轉而只用 ReentrantLock 呢?並發性專家 Brian Goetz
Time of Update: 2017-02-27
摘要J2EE編程正在變得越來越複雜。J2EE已經發展為一個API、複雜化的編程和配置的複雜網路。為了應對這種複雜性,新的架構和方法不斷湧現。這些架構高度依賴於一個稱為IoC(Inversion of
Time of Update: 2017-02-27
整體和部分還記得這條諺語嗎,“整體大於部分之和”?如果把一個個獨立的事件組合成一個相互作用的整體,產生的結果會比單個個體的作用之和要大得多。程式也是一樣的道理。隨著一個個新方法被添加到程式中,整個程式可能的控制流程程迅速增加。對於大型程式而言,很快局面就會無法控制了。就象是一個荒謬而又不可思議的戲法,有時您得到的最終結果並不是您所期望的方向 ― 這同您在重載方法或者覆蓋方法時遇到的情況有些類似。Broken Dispatch
Time of Update: 2017-02-27
不要強制轉換這個類!與可怕的 null 指標異常(該異常除了報告null 指標之外,對於將要發生的事情什麼也不說)不同,類強制轉換異常相對來說容易調試。類強制轉換經常發生在遞迴下行資料結構的程式中,通常是當代碼的某些部分在每次方法調用中下行了兩級且在第二次下行時調度不當時發生的。程式員可通過學習 Double Descent 錯誤模式來識別這種問題。Double Descent 錯誤模式本周的專題是 Double Descent
Time of Update: 2017-02-27
當使用欄位中特殊的標記來區別物件類型時,可能會產生標記對相關資料誤貼標籤的錯誤 ― 通稱為 Impostor Type 錯誤模式。在診斷 Java 代碼的這一部分中,Eric Allen 對這個錯誤的癥狀和起因進行了分析,詳細說明了預防錯誤發生的方法,並討論了一種迷人的混合實現方法,這種方法不使用 impostor type,但最後,還是有很多相同的缺點產生。請在
Time of Update: 2017-02-27
雖然傳統斷言可以增加對 Java 代碼執行的檢查次數,但有許多檢查不能用它們來執行。彌補這一缺陷的方法是使用“時態邏輯”,它是一種用於描述程式狀態如何隨時間而更改的形式體系。在本文中,Eric Allen 將討論斷言,介紹時態邏輯並描述用於處理常式中時態邏輯斷言的工具 (下一篇文章將檢查以前的錯誤模式和時態邏輯的應用程式)。我們大家同意對 Java
Time of Update: 2017-02-27
Liar, liar!設想一下:您已經為一個分布式系統精心設計了一個極好的 GUI 程式,它包含了客戶機請求的所有東西及其它一些東西。您已經讓它運行通過了一個自動化測試套件的測試 ― 由於不變數的數量是個天文數字,因此,自動化測試是必須的。測試的結果是程式獲得了一張“無錯誤的健康證明書”。發布這個 GUI 的期限到了,但是,作為一個象您這樣嚴格的程式員,只是為了發現錯誤的行為 ―
Time of Update: 2017-02-27
通常,在運行 Java 程式時,必須使用 String[] 輸入參數將參數傳入,從 main() 方法運行程式。但是如果程式仍在調試中,那麼,這可能會成為一項繁重的任務。本月,Eric Allen 討論對程式中的運算式和語句進行互動式評價的優點,並且提供幾個協助您處理這一任務的 Java repl(“read-eval-print-loop”工具,“讀取-評價-列印-迴圈”工具)。他還討論互動式評價如何協助構建 GUI 和探索新的
Time of Update: 2017-02-27
支援靜態分析(包括類型檢查)的主要論據是:其結果適用程式所有可能的運行,而通過單元測試只能保證被測試的組件(在測試它們的平台上)只適用測試組件的特定輸入。支援單元測試的主要論據是它更容易處理。您可以測試程式的許多約束,這些約束遠遠超出了同期的靜態分析工具所能達到的範圍。請允許我在此冒昧地說一句:我認為將這兩種工具看作對立的是一個錯誤。每種工具都有助於構建更健壯的程式。實際上,它們可以通過非常強大的方式進行互補。每種工具都有各自的長處,對於補充另一種工具特別有用:單元測試能顯示執行的常用路徑,從而
Time of Update: 2017-02-27
儘管傳統的斷言可以增加對 Java 代碼所作的檢查次數,但僅用它們,還是有許多檢查無法完成。處理這種情況的方法之一就是使用 時態邏輯。請回憶上個月的文章“ Assertions and temporal logic in Java
Time of Update: 2017-02-27
用 JUnit進行單元測試是一個功能強大的方法,它可以確保您的代碼基礎的完整性,但是一些不變數比其他(方法調用序列是其中一種)更難測試。在診斷Java 代碼這一部分,Eric Allen描述了怎樣在您的單元測試中使用記錄器(一種特殊的接聽程式),來確保一個方法調用序列按恰當的順序發生。請點擊文章頂部和底部的 討論,與作者和其他讀者在論壇上分享您關於本文的看法。隨著時間的推移,當系統開發人員,維護人員甚至是系統詳細說明改變時,JUnit
Time of Update: 2017-02-27
空標誌錯誤模式在我的上一篇文章中,我說明了用null 指標代替各種不同基本類型的資料是如何成為引起 NullPointerException 異常最普遍的原因之一的。這一次,我將說明用null 指標代替異常情況怎麼也會導致問題的出現。在 Java 程式中,異常情況通常是通過拋出異常,並在適當的控制點捕獲它們來進行處理。但是經常看到的方法是通過返回一個null 指標值來表明這種情況(以及,可能列印一條訊息到 System.err )。如果調用方法沒有明確地檢查null