Time of Update: 2017-02-27
以下內容總結自《Effective
Time of Update: 2017-02-27
Java語言的一個優點就是取消了指標的概念,但也導致了許多程式員在編程中常常忽略了對象與引用的區別,本文會試圖澄清這一概念。並且由於Java不能通過簡單的賦值來解決對象複製的問題,在開發過程中,也常常要要應用clone()方法來複製對象。本文會讓你瞭解什麼是影子clone與深度clone,認識它們的區別、優點及缺點。看到這個標題,是不是有點困惑:Java語言明確說明取消了指標,因為指標往往是在帶來方便的同時也是導致代碼不安全的根源,同時也會使程式的變得非常複雜難以理解,濫用指標寫成的代碼不亞於使
Time of Update: 2017-02-27
一、運行class檔案執行帶main方法的class檔案,Java虛擬機器命令參數行為:java <CLASS檔案名稱>注意:CLASS檔案名稱不要帶檔案尾碼.class例如:java Test如果執行的class檔案是帶包的,即在類檔案中使用了:package <包名>那應該在包的基路徑下執行,Java虛擬機器命令列參數:java
Time of Update: 2017-02-27
一、概述Message Service是一種在分布式應用之間提供訊息傳遞服務的軟體,具有可靠、非同步、寬鬆結合、語言中立、平台中立的特點,而且通常是可配置的。它的實現原理是:對寄件者和接收者之間傳遞的訊息進行封裝,並在分布式訊息客戶程式結合的位置加上一個軟體處理層。Message Service為訊息的客戶程式提供了一個介面,這個介面隔離了底層的Message Service,使得各種不同的客戶程式能夠通過一個友好的編程介面方便地通訊。JavaMessage Service(Java
Time of Update: 2017-02-27
本文主要對類和對象初始化全過程進行分析,通過一個實際問題引入,將原始碼轉換成 JVM 位元組碼後,對 JVM 執行過程的關鍵點進行全面解析,並在文中穿插入了相關 JVM 規範和 JVM
Time of Update: 2017-02-27
本文介紹了一種改寫(override)equals 方法的技巧。使用該技巧,即使在實體類的子類添加了新的域(field)時,仍然能夠滿足 equals 方法的約定。在《Effective Java》一書的第 8 條目中,Josh Bloch 將子類化時滿足 equals 約定這一困難描述為:物件導向語言中等值關係的最根本問題。Bloch
Time of Update: 2017-02-27
1 簡介Java SE 6(Java Platform Standard Edition 6)的一個主要設計原則就是以效能缺陷為目標,通過當前最流行的一些 Java 基準測試以及與 Java 社區的緊密協作來確定對效能影響最大的增強關鍵領域,從而提高效能和延展性。本指南將概述 Java Standard Edition 6 中新增功能和延展性改進,同時提供各種行業標準和內部開發的基準測試結果,以便示範這些效能改進的影響。2 新增功能和效能增強Java SE 6
Time of Update: 2017-02-27
一、引言在本文中,我們將向你展示如何為扁平形狀添加一種燈光效果以實現一種類3D外觀。也許你比較滿意於自己的文字表達能力,但一幅圖片往往能夠產生更好的效果。對於圖形處理來說,也是如此;不妨請參考一下圖1中的兩種圖形。在本文中,我將向你展示如何克服左邊扁平形狀所帶來的煩惱而以一種更為光滑的更具舒服感的形狀代替。圖1.普通扁平形狀與施加Java
Time of Update: 2017-02-27
JDK為程式員提供了大量的類庫,而為了保持類庫的可重用性,可擴充性和靈活性,其中使用到了大量的設計模式,本文將介紹JDK的I/O包中使用到的Decorator模式,並運用此模式,實現一個新的輸出資料流類。Decorator模式簡介Decorator模式又名封裝器(Wrapper),它的主要用途在於給一個對象動態添加一些額外的職責。與產生子類相比,它更具有靈活性。有時候,我們需要為一個對象而不是整個類添加一些新的功能,比如,給一個文本區添加一個捲軸的功能。我們可以使用繼承機制來實現這一功能,但是這
Time of Update: 2017-02-27
快速發展的開發人員社區、對各種後端技術(包括JMS、JTA、JDO、Hibernate、iBATIS等等)的支援,以及(更為重要的)非侵入性的輕量級IoC容器和內建的AOP運行時,這些因素使得Spring
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網路編程從入門到精通(34):讀寫緩衝區中的資料---使用get和put方法按順序讀寫單個資料對於緩衝區來說,最重要的操作就是讀寫操作。緩衝區提供了兩種方法來讀寫緩衝區中的資料:get、put方法和array方法。而get、put方法可以有三種讀寫資料的方式:按順序讀寫單個資料、在指定位置讀寫單個資料和讀寫資料區塊。除了上述的幾種讀寫資料的方法外,CharBuffer類還提供了用於專門寫字串的put和append方法。在本文及後面的文章中將分別介紹這些讀寫緩衝區的方法。雖然使用alloc
Time of Update: 2017-02-27
雖然傳統斷言可以增加對 Java 代碼執行的檢查次數,但有許多檢查不能用它們來執行。彌補這一缺陷的方法是使用“時態邏輯”,它是一種用於描述程式狀態如何隨時間而更改的形式體系。在本文中,Eric Allen 將討論斷言,介紹時態邏輯並描述用於處理常式中時態邏輯斷言的工具 (下一篇文章將檢查以前的錯誤模式和時態邏輯的應用程式)。我們大家同意對 Java
Time of Update: 2017-02-27
通常,在運行 Java 程式時,必須使用 String[] 輸入參數將參數傳入,從 main() 方法運行程式。但是如果程式仍在調試中,那麼,這可能會成為一項繁重的任務。本月,Eric Allen 討論對程式中的運算式和語句進行互動式評價的優點,並且提供幾個協助您處理這一任務的 Java repl(“read-eval-print-loop”工具,“讀取-評價-列印-迴圈”工具)。他還討論互動式評價如何協助構建 GUI 和探索新的
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
Time of Update: 2017-02-27
靜態類型 ― 多數程式員喜歡它或憎恨它。支援者誇耀說靜態類型讓他們寫出更乾淨更可靠的代碼,沒有它們則做不到這麼好。批評者埋怨說靜態類型增加了程式的複雜性。是的,靜態類型不是免費午餐;有時候,它們用起來很乏味。然而,如果我們主要關心的是使代碼沒有錯誤,那麼,總的說來,Java 編程還是擁有並使用靜態類型好些。為什嗎?靜態類型檢查:通過早期錯誤偵測,提高健壯性通過在最佳的時候作所需的檢查,提高效能彌補單元測試的缺點我們來更仔細地分析這些原因,並看一看靜態類型檢查和結對程式設計(pair
Time of Update: 2017-02-27
每次我們用Java命令運行我們的Java程式,都會在JVM中開啟一個進程,對於每一個進程,都會有一個相對應的工作目錄,這個工作目錄在虛擬機器初始化的時候就已經設定好了,預設的情況下,工作目錄是我們工程的根目錄,比如:/home/test/Project---bin--divinemind.onlyfun.test.helloworld.java--src假如我們在用下面的命令啟動helloworld,那麼這個進程的根目錄就是/home/test/Project/bin,helloworld裡進行