讀古今文學網 > Java程序員修煉之道 > >

「Kirk說加油站也賣啤酒。」這是Ben Evans跟我說的第一句話。他來克里特島參加一個開放型Java會議。我說我通常到加油站就是加油,但那邊拐角確實有個店賣啤酒。Ben看起來對我的回答有點兒失望。我在這個希臘小島上生活了5年,還從來沒在加油站買過啤酒。

當我在看這本書時,那種似曾相識的感覺又來了。我自認為是一名Java專家:用Java寫了15年程序,發表了幾百篇文章,在各種會議中演講,還執教Java高級課程。可閱讀Ben和Martijn的這本大作,經常能給我一些意料之外的啟發。他們一開始先介紹了為改變Java生態系統所做的開發工作。類庫的內部實現修改起來相對容易,一般也能見到成效。例如,Arrays.sort的內部實現在Java 7中不再用MergeSort算法,而是改用了TimSort。由於這個變化,你不用修改自己對偏序數組進行排序的代碼就可能看到性能的提升。然而,修改類文件格式或添加新的VM特性則需要大量工作。Ben瞭解這些情況,因為他在JCP執行委員會任職。這本書也是關於Java 7的,所以你能接觸到Java 7中的所有新特性,比如語法糖的完善、String上的switch、分支/合併,還有Java NIO.2。

並發就是線程和同步,對嗎?如果這就是你對多線程的認識,那麼你需要學習新知識了。就像作者在書中指出的,「並發領域的研究工作正開展得熱火朝天」。與並發相關的郵件列表上每天都有討論,新點子層出不窮。本書會告訴你如何看待分而治之策略以及如何規避某些安全陷阱。

在我看到類加載那一章時,我覺得他們說得有點兒過了。那都是我和朋友們過去用來炫耀的技巧,居然也給擺出來供大家研習了!他們講解了javap(這個小工具用於透視Java編譯器生成的字節碼)的工作方式,還談到了新的invokedynamic指令,並解釋了它跟普通反射的區別。

我特別喜歡講性能調優的第6章。除了Jack Shirazi的Java Performance Tuning,這還是第一本能夠抓住「如何使系統運行更快」這個本質問題的書。我可以用四個字來總結這一章的內容:「測量,別猜。」這是做好性能調優的本質,因為人們不可能猜到運行慢的是哪段代碼。這一章從硬件的角度解讀了性能方面的問題,而不是只提供編碼技巧。作者還向你展示了如何測量性能。有一個挺有意思的基礎測試小工具——CacheTester類,可用於查看緩存未命中時的開銷。

本書第三部分介紹了JVM上的多語言編程。Java不僅僅是Java編程語言,它還是一個可以運行其他語言的平台。我們已經見過不同類型語言的爆炸式增長了。有些是函數式的,有些是聲明式的,還有一些是平台的接口(Jython和JRuby),讓其他語言可以在JVM上運行。語言分為動態的(如Groovy)和靜態的(如Java和Scala)。在JVM上我們可能因為多種原因而使用非Java的語言。如果正好要開始一個新項目,在做決定之前先看看都有什麼可用吧。你可能不用再寫那麼多套路化的代碼了。

Ben和Martijn向我們介紹了三種備選語言:Groovy、Scala和Clojure。在我看來,它們是當下最切實可行的選擇。作者描述了這些語言之間的差異、與Java的差異以及它們的特性。不需要太多的技術細節,介紹每種語言的各章足以幫你弄清楚應該用哪一種。別指望能在書中看到Groovy的參考手冊,但你會瞭解哪種語言更適合你。

之後,你將深入瞭解如何進行測試驅動開發以及如何持續集成系統。我發現一件很有意思的事,忠實的「老管家」Hudson這麼快就被Jenkins取代了。無論如何,這些工具跟Checkstyle和FindBugs一樣都是項目管理的基本工具。

你有望通過研讀本書成為一名優秀的Java開發人員。不僅如此,你還能瞭解如何保持優秀。Java一直在變。下一版中我們將見到lambda表達式和模塊化。1人們也在不斷設計新語言,不斷更新並髮結構。你現在瞭解的很多真相將來可能不再是真相。因此,我們必須活到老學到老!

1 實現Java模塊化的Jigsaw項目被延後到Java 9了,至少要到2015年。——譯者注

一天,我又開車路過Ben想買啤酒的那個加油站。在經濟狀況如此低迷的希臘,它也像很多公司一樣關張了。我再也不可能知道他們賣不賣啤酒了。

Heinz Kabutz博士 知名Java技術教育家、The Java Specialists' Newsletter創始人