Java SE 6 正式現身

等待了許久,令人引頸期盼的 Java SE 6 終於在今天釋出正式版,現在已經可以從下載頁面取得 Java SE Development Kit 6(簡稱JDK 6)了。目前在下載頁上看到 Windows(x86 與 x64)、Linux(x86 與 x64)、Solaris SPARC(包括 32-bit 和 64-bit)、Solaris(x86 與 x64)等平台可供選擇。你可以直接點選檔案名稱來下載,或者一次勾選數個想要下載的版本,並選擇「Download selected with Sun Download Manager」來使用 Java Web Start 下載。它的好處是可以隨時暫停、續傳、重新開始、辨正檔案、多檔下載等等,有興趣的人可以玩玩看。

本次 Java SE 6 新增和加強了不少地方的功能,值得寫篇文章來好好介紹一番。此處我先簡短介紹幾個比較有趣的改進,日後有時間的話再另行闢文。Java SE 6 特色如下:

Collection 架構

  • 新增 Deque 介面:支援兩端插入及刪除節點的佇列。
  • 新增 NavigableSet 介面:繼承自 SortedSet 且功能更強大,是屬於「可導覽」的集合。它提供了有如下方法:
    1. descendingIterator() 遞減迭代,descendingSet() 遞減集合,即集合本身的反向集合
    2. headSet(E e)tailSet(E e) 前段集合及後段集合,即在順序中位於某物件 e 之前/之後的元素所形成的集合
    3. lower(E e)floor(E e)ceiling(E e)higher(E e) 高斯函數,即和某物件相比後最接近此物件的元素,相比方法依序為 <<=>=>
    4. 另還有 NavigableMap 介面,和 NavigableSet 的概念大致雷同,只是用在 Map 上而已
  • 新的 ArrayDeque 類別及原有 LinkedList 類別:實作 Deque 介面。
  • TreeSetTreeMap 類別:各自實作 NavigableSetNavigableMap 介面。

Swing 及 Java 2D

  • 增進 Windows 外觀與視覺(Look and Feel)效能,使用微軟 API 來繪製部份組件,並確保每一組件有正確的外觀和行為。
  • 在 Linux GTK 部份則是使用 GTK API 囉,這裡也做了和 Windows 部份類似的加強。
  • 對 OpenGL、DirectX 效能上的增進。
  • 改進拖放支援。原先「拖拉 Drag」的結果無法如使用者所預期般操作,而「放開 Drop」的支援很陽春且難以自訂。因此本次針對 Drag-and-drop gesture(拖放手勢)做了很大的改進。現在我可以在 JTreeJTable 中把元素上拉下拖,藉以把它擺放到新的位置了。這對搬移目錄檔案或自訂清單的物件順序來說真方便
  • Double buffering(雙重緩衝)這次終於是玩「真」的了,效能比之前的雙重緩衝要快上不少。
  • JTable 可以排序和篩選了。這真是謝天謝地,終於可以不用在茫茫的無序 Rows 海中找資料,也不用在塞資料到 JTable 之前先做排序了。現在可以直接點每個直欄最上方的「欄位名稱」來排序了,當然它是可以遞增排序和遞減排序的。
  • 好用的 SwingWorker,搖擺工人(呃,這是我個人一廂情願的中文直接意譯法)幫你解決執行緒和 Swing 的事情。
  • JTabbedPane 支援其他組件的 tab 分頁。以前 tab 分頁標籤中只能使用字串和圖示,無法加入其他組件。所以像是 Mozilla Firefox 的分頁有個紅色小叉叉在每個分頁旁,讓你可以點了之後關閉分頁的事情是做不到的,因為我們沒辦法把按鈕放進去。不過現在你可以做得到了。
  • Java 2D 在 Windows 上有更多及更好的圖形硬體加速了。
  • 加強了文字的顯示品質,反鋸齒的效果出現!
  • 程式啟動圖片。執行 Word 和 Excel 時會先跳出一個小方框畫面,過了幾秒之後它會消失不見,然後再是真正的程式本體出現,對吧?羨慕嗎?也很想要讓自己的視窗程式也有這樣「程式啟動圖片」的功能嗎?請下載 Java SE 6 吧。(不過話說其實 Apache Ant 也有這個功能,只需在 build.xml 中加上一個 task 並指定圖片。沒記錯的話是 tag 的樣子,不過現在 Java 直接支援,不用透過 Ant 來偽裝了。)
  • 支援「圖示前進到啟動列」功能。玩 MSN 時會在螢幕右下角、工作列的常駐程式區看到一個小綠人的圖示吧?或是網路連線之後會在同樣區域有個兩台電腦在一直眨眼的圖示吧?Java 程式的圖示現在也可以前進到那邊去了。寫個看起來是「音量控制」的圖示,實際上卻是自製的小型瀏覽器,專連 Web MSN Messenger 網站的聊天程式吧!
  • 更漂亮的介面。在外觀上要漂亮許多,比以往的介面好看。如今 Java 的桌面應用程式也慢慢脫離了以前醜小鴨的宿命了啊~
  • ImageIO:GIF writer。(感謝上帝,賜予了這個新功能)
  • 延伸了 SpringLayout。就是加了一些常數欄位讓你的 Swing 版面配置更隨心所欲,讓你更 Spring。

Java IO

  • 新的 Java.io.Console 類別:顧名思義,就是用來存取 console 的類別,提供的方法有:
    1. flush() 輸入至 console
    2. format() 輸出已格式化過的字串,printf() 嗯,輸出格式化字串
    3. readLine() 一次讀一行,這真是太好了、readPassword() 讀取密碼,等好久,終於來了
  • File 的新方法:
    1. getTotalSpace() 取得目前磁區的容量
    2. getFreeSpace() 取得目前磁區的未配置容量
    3. getUsableSpace() 取得目前磁區可使用的容量,檢查了有關寫入權限和一些作業系統的限制,例如像是配額限制(quota)
    4. setWritable()setReadable()setExecutable()canExecute() 設定有關讀、寫、執行檔案的權限
  • 在 nio 上也有一些改進。

JConsole

  • 在 Java SE 5 中就出現的 JConsole,本次可是官方正式認可的支援了。
  • 支援 JConsole 外掛系統。
  • 動態附加的能力。可以將 JConsole 連線到任一個有支援動態 Attach API 的程式。
  • 加強了使用者介面,使其更方便存取。(我用過的結果認為:比 Java SE 5 的 JConsole 要好上一些了)
  • 新的「概觀」分頁和「摘要」分頁。概觀可以讓你一次看四張圖,摘要的資訊也略有改善。不過我個人認為那個字型應該要挑個好看點的。
  • 把玩 MXBean 更方便了。就是管理 MXBean 的分頁有改進了,我個人覺得是還可以啦。

新的標準

  • JAXB 到 2.0,又是一堆 annotation 玩不完了。
  • 在 JDBC 上有許多重要的改進和更新(JDBC 4.0)。
  • 寫 WebService 更簡單了。請用 annotation:@WebService@WebMethod
  • 提供標準 java.util.spi 支援(Service Provider Interface)。
  • 提供 Array Reallocation API。
  • 新的 javax.script 套件:支援動態描述性語言(script language)。把 JavaScript 放進 Java 來玩吧!
  • 支援 Java Compiler API。也就是在 Java 程式中編譯 Java 程式。

插個話:老實說我個人對 Script 和 Compiler 這兩項支援還滿有興趣的,因為我六七年前曾經很迷 Mud,那時還在一些 Mud 站台中擔任大神撰寫程式,使用的是 LPC 語言。它可以動態更新物件,也就是說我在 Mud 遊戲之中使用 edit 指令來進入一個簡單的編輯器(類似 Linux 上的 ed),然後編輯某個房間物件的檔案,例如改個參數,放隻怪物。存檔之後,我只需要用 rehash 指令來更新這個已修改過的檔案,那麼在遊戲中這個房間的參數就會立即套用,新怪物馬上出現。

Rehash 在做的事情就是將原本的 object 從原本的程式載入器 (相當於 Java 的 ClassLoader) 中清除,然後再重新載入該物件,而現在 Java 用這兩個 API 應該是可以很方便地來撰寫 Mud 和除錯了。試想看看,對於 24 小時在運行的網路遊戲程式,許多問題都是在使用者數量一多之後才浮現的,這時總不能要大家下線、編譯並重啟遊戲、大家上線、測試 bug 有沒有修復、沒修好就再重來一次……。唔,該是把多年前自己埋頭苦寫的 Jos Mud 再拿出來玩的時候了嗎?……

其他

  • 新的 Desktop 類別,可以和去啟動關聯程式。它有如下的方法:
    1. browse(URI) 用系統的預設瀏覽器來開啟 URI
    2. edit(File) 開啟 File 的關聯程式來編輯
    3. mail()mail(URI) 啟動預設信件軟體來「撰寫新郵件」
    4. open(File) 使用 File 的關聯程式來開啟 File
    5. print(File) 列印檔案
  • Unicode 正規化,還有對 ResourceBundle 也做出了延伸。
  • OutOfMemoryError 的診斷更人性化了,至少比之前的一句真言「java.lang.OutOfMemoryError」要好得多了。
  • MBean 描述子內容改用泛型聲明支援。現在我們可以用 @MXBean 來撰寫監視及管理的物件。還有 @DescriptorKey 可以玩。
  • 支援 XML 數位簽名。
  • 同樣地,許多在安全性上的支援。

就先介紹到這邊吧。各位 Java 愛好者心動了嗎?快去下載來玩玩吧。

話說有人和我說他對可怕的 < > @ 還沒搞定,沒想到 Java SE 6 就出來了,這個世界的變化真的是好快。不過我個人是認為,有人喜歡在安定中求穩步發展,有人喜歡追逐最新的規格和變化,這是每個人都有權利去自行選擇的。我覺得不論是屬於那一種,更重要的是身為一個程式設計師,應該都要有熱情的編程態度、認真的研究精神、嚴謹的規劃設計、耐心的除錯追蹤、靈活的清晰思維,以及永遠的不斷創新。你覺得呢?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

15 − six =

返回頂端