程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 革命性的Java 8:Java回來了

革命性的Java 8:Java回來了

編輯:關於JAVA

JavaOne 2013已於近日在舊金山舉行。9月22日,來自Oracle員工Peter Utzschneider、Nandini Ramani和Cameron Purdy的戰略主題演講拉開了此次慶典的序幕,活動持續到9月26日。

這是第十八次JavaOne大會,Java社區並沒有顯出放緩的跡象。Utzschneider告訴觀眾,Java仍然是世 界第一的開發平台,並且Java用戶組的數量以每年10%的速度增長。

Java的未來

Ramani探討了Java的現狀以及Java如何有若干不同的SDK,這裡僅舉幾例,如Java SE 7、CDC 1.1(基 於SE 1.4.2)、CLDC(基於SE 1.3)和Java ME。過去,這些實現能很好地服務於特定的垂直市場,但多 年來,每種實現都各自演變而變得越來越孤立。在Java 8中,Compact Profile將取代CDC。

Java ME和Java SE之間的API會很類似,Java語言會支持兩者的所有特性。Java 8會帶來統一的平台: 代碼可移植、通用的API和工具——從SE嵌入式開發到服務器端Java EE開發。Java開發人員的 類型將來會只有一種。

Java平台戰略的其它要素還包括:同步發布(Java 8預覽版現在已經可以下載)以及與合作伙伴(ARM 、Freescale和Qualcomm)一起使Java成為芯片上的一等公民。為了能夠簡單地移植和擴展Java Embedded ,Oracle在8月份啟動了Java平台集成器項目。

Java EE 7在剛剛過去的夏天發布,上兩屆JavaOne大會都針對它進行了討論,可見這是一個重要的裡 程碑。Purdy提到,Java EE 7重點關注三個方面:開發人員的生產力、滿足企業需求和HTML5。

兩年前,在Java EE 7宣布的時候,主題是雲。現在,Java EE 7有許多用於雲部署的簡單易用的特性 ,包括安全增強、默認資源、數據庫結構生成、RESTful服務客戶端API以及用於多租戶應用程序的JSF皮 膚。最後,Cameron宣布Avatar項目從現在起開源。Avatar跟Node.js類似,但運行在JVM上。

Java 8是革命性的,Java回來了

Java 8是此次大會一個很重要的演講主題,這點從Mark Reinhold的技術主題演講中可見一斑。Java 8 包含了許多新特性,包括新的Date和Time API(JSR 310)、Nashorn JavaScript引擎、類型注解(JSR 308)、Compact Profile和Lambda項目(JSR 335)。

Lambda是編程模型最大的單一升級,比以往任何升級都要大,甚至比泛型還大。我們精心協調,同時 對虛擬機、語言和庫進行了改良,自從有Java以來,這是第一次。但結果感覺仍然像Java。 ——Mark Reinhold

Oracle Java語言架構師Brian Goetz繼續展示Lambda表達式如何去掉大量只用於表達簡單思想的樣板 文件。在Lambda表達式出現之前,開發人員經常使用蹩腳的“牛肉面包比(beef to bun ratio) ”來表達思想,通常是用內部類。Goetz展示了下面的例子:

Collection<Person> people = …;

    Iterator<Person> ip = people.iterator();
    while (ip.hasNext()) {
        Person p = ip.next();
        if (p.getAge() > 18) {
            ip.remove();
        }
    }

為了抽象上述思想,開發人員可以用Predicate重寫上述測試代碼,寫法如下:

Collections.removeAll(people,
                          new Predicate<Person>() {
                              public boolean test(Person p) {
                                  return p.getAge() > 18;
                              }
                          });

使用Lambda表達式,寫法要簡單許多:

Collections.removeAll(people, p -> p.getAge() > 18);

Lambda表達式不僅僅是一種更好的語法,它還使用invokedynamic生成一種更簡潔高效的字節碼。作為 Java語言及其API已經變得更好的證明,Goetz談論了新的流API以及如何用它在集合上進行批量操作。例 如:

int highestWeight = people.stream()
    	                      .filter(p -> p.getGender() == MALE)
    	                      .mapToInt(p -> p.getWeight())
    	                      .max();

這提供了語法、性能和抽象,而開發人員還獲得了並行。Java 7新增了用於任務分解的Fork/Join框架 ,但其API使它很難使用。在Java 8中,開發人員只需修改一行代碼,將stream()改成parallelStream ()即可:

int highestWeight = people.parallelStream()
    	                      .filter(p -> p.getGender() == MALE)
    	                      .mapToInt(p -> p.getWeight())
    	                      .max();

要了解更多關於Lambda項目的信息,查看這裡或者下載Java 8。

NetBeans 7.4

NetBeans工程總監John Ceccarelli用象棋游戲演示了HTML5應用程序(用Knockout.js編寫)的編輯。 他示范了如何在NetBeans中調整屬性(與在Firebug或者Chrome開發人員工具中的操作類似)並使調整結 果即時反映在浏覽器中,而且無需重新加載。這看起來非常像IntelliJ IDEA的LiveEdit插件。

去年,NetBeans引入了Easel項目,其目的是在NetBeans中增加高級HTML5支持。Ceccarelli提到,社 區對此的反應是“嘿,那太棒了,不過我們希望在EE項目裡完成這一工作。”好消息是,就在 JavaOne大會前夕,NetBeans 7.4 RC1發布了,支持HTML5、Java EE、Java Web和Maven Web項目。

除了HTML和CSS的實時編輯功能外,NetBeans 7.4還支持Angular、jQuery和Knockout.js等JavaScript 框架。這意味著代碼編輯器可以識別JavaScript中所有的DOM id以及Model名稱。NetBeans 7.4全是關於 移動Web應用程序和移動混合應用程序的開發(通過支持Cordova 3.0)。有趣的是,如何在桌面浏覽器之 外的移動設備上使用實時編輯功能。最新的候選版本可以從netbeans.org上下載。

上文提到的演示程序,其象棋服務器用Java EE 7編寫,並部署在GlassFish 4服務器上。該應用程序 有五個不同的模塊:象棋端點、玩家注冊、象棋引擎、象棋游戲管理器和持久性管理器。

象棋服務器使用了許多Java EE新技術,包括:WebSockets、Batch、EJB、JPA和JAX-RS 2.0。客戶端 與服務器的所有通信都是通過JSON完成。GlassFish團隊的一名成員Santiago Pericas-Geertsen展示了一 些代碼,用於說明在Java EE 7中建立WebSocket端點非常容易:

@ServerEndpoint(value = "/chessserver",
                    encoders = MessageEncoder.class,
                    decoders = MessageDecoder.class);
    public class ChessServerEndpoint {

        @Inject private GameCatalog catalog;

        @OnMessage
        public Message onMessage(String message, Session session) {
            return message.processMe(this);
        }
        ...
    }

跟該端點交互的客戶端API與此非常類似,而且看上去很容易實現。

Oracle技術主題演講中展示的最後一項技術創新是DukePad。這是一款可以在家DIY的平板電腦,基於 Raspberry Pi和JavaSE 8 Embedded。他們發現CPU性能欠佳:Raspberry Pi CPU的速度幾乎和Pentium Ⅱ 一樣,比Samsung Galaxy S4慢14倍,比Intel Core i7處理器慢94到100倍。不過,它的GPU非常好,比 Pentium Ⅱ在1996年的速度快400倍。

OpenJFX開源了大部分組件,包括iOS和Android原型。演講者提到,OpenJFX論壇很健康,他們已經從 用戶那裡收到了大量的Bug報告。他們也收到了相當數量的社區貢獻。JavaFX包含在JavaSE 8中。

對於Java 9及其未來,Oracle有若干方案,主要包括Java On GPUs、Reification(處理泛型的類型擦 除問題)、JNI 2.0、Memory-Efficient數據結構以及用Jigsaw構建模塊化平台。

查看本欄目

Java社區

Oracle產品管理高級主管Donald Smith拉開了Java社區主題演講的序幕。他帶來了許多不同的人,在 台上談論Java技術令終端用戶歡欣鼓舞的案例。

Tori Wieldt談了“Raspberry Pi挑戰”活動,25名開發人員參與其中,完成了六個項目。 “心髒眼鏡(Heart of Glass)”(用谷歌眼鏡實時監控心率)和MTAAS(怪獸卡車服務)是 此次活動中出現的兩個成功的項目。Donald Smith還宣布,Oracle已經與Raspberry Pi基金會簽訂了一項 OEM協議。後者將開始在他們的一部分鏡像中包含Java SE,因此Java會以開箱即用的方式包含其中。

在社區主題演講中,還有其它值得注意的公告,包括Square成為OpenJDK的一員以及Devoxx4Kids正在 尋找JUG負責人和家長,以便在他們所在的城市主辦講習班。當然,Aditya Gupta如何成為Minecraft編程 高手的演示,也是亮點之一。同時,這也是主題演講中的第一個Eclipse演示程序。他讓豬飛起來,並使 爆炸創造更多的爆炸。他是從他的爸爸Arun Gupta那裡和Minecraft Forge上學到了其中大部分知識。

Alison Derbenwick Miller提到了Oracle學院。後者為從幼兒園到12年級的學生以及大學生提供課程 。該學院去年培訓了250萬名學生,並提供了學生講習班、教師發展和認證折扣。

在社區主題演講的教育部分之後,進行了許多機器人演示。James Gosling甚至還作為嘉賓談了他目前 的工作。

Java回來了的證據

為什麼說Java回來了?戰略和技術主題演講都幫助解釋了這個問題。Java 8希望再次使Java編程變得 有趣(通過減少樣板代碼),而Java EE 7中大量的API將會使構建現代應用程序變得簡單。在最近的一些 文章中,還有進一步的證據:

Wired的“Java迎來第二個春天:遺物歸來,統治Web”

Dr. Dobb的“Java頻臨死亡?它看起來確實非常健康”

如果讀者沒有機會參加今年的JavaOne大會,可以在日歷上記下明年的會議日期。如果不是為了技術內 容,那麼可以來參與交流。Oracle答謝晚會上有免費的食物、啤酒以及Mroon 5和Black Keys的音樂表演 。之後還有派對,展廳裡到處都是人。

最重要的是,開發人員社區的熱情似乎一如既往的強烈。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved