黑武士的領地
          ——黑武士是反微軟的JAVA陣營的流氓JAVA程序員
          posts - 26,comments - 4,trackbacks - 0
           1.J2SE:懷胎

            Java的歷史可以追溯到1991年4月,Sun公司的James Gosling領導的綠色計劃(Green Project)開始著力發展一種分布式系統結構,使其能夠在各種消費性電子產品上運行,他們使用了C/C++/Oak語言。由于電子產品種類繁多,運行環境各不相同,使得用這些語言進行開發的軟件必須為不同的電子產品而專門設計,所以項目組疲于奔命,消費性電子產品軟件環境的發展無法達到預期的目標,綠色計劃也陷于停滯狀態。

            直至 1994年下半年,由于Internet的迅猛發展和環球信息網 WWW的快速增長,第一個全球信息網絡瀏覽器Mosaic誕生了;此時,工業界對適合在網絡異構環境下使用的語言有一種非常急迫的需求;Games Gosling決定改變綠色計劃的發展方向,他們對Oak進行了小規模的改造,就這樣,Java在1995年的3月23日誕生了!Java的誕生標志著互聯網時代的開始,它能夠被應用在全球信息網絡的平臺上編寫互動性及強的Applet程序,而1995年的Applet無疑能給人們無窮的視覺和腦力震蕩。

            但沒有相應的開發庫而只靠Java語言來進行開發肯定是困難重重,所以Sun公司在1996年的1月23日發布了JDK1.0來幫助開發人員的開發。
          JDK包括兩大部分:運行環境和開發工具。而運行環境包括五大部分:核心API,集成API,用戶界面API,發布技術,Java虛擬機(JVM)。Java能夠在信息網絡時代快速發展,得益于它獨特的組成結構,它并不直接被編譯成所在平臺的機器語言然后執行,而是先被編譯成字節碼,然后才到裝有JVM的硬件上運行,所以它能夠跨平臺運行;而且,不是一定要使用Java語言來寫程序才能編譯成Java字節碼,我們用C/C++/Javascript等語言來寫程序也可以編譯出JVM要求的字節碼文件。在這個時期,人們使用最多的 Java API 無疑地就是 AWT,因為 JDK 1.0 時只有 AWT 稱得上是一組完整的 framework,其它 Java API 都比較偏向個別的 class。

            緊跟著,Sun公司在1997年2月18日發布了JDK1.1。JDK1.1相對于舊版本最大的改進,是推出了JIT(Just-In-Time)編譯器。傳統的JVM收到一道字節碼指令后,解釋成機器碼,馬上執行該機器碼,然后丟掉該機器碼,再接收下一道字節碼指令……即便是以前執行過的字節碼指令,依然需要重新解釋成機器碼才能執行。而JIT編譯器會把常執行的部分先解釋好放在內存,以后再次執行該指令時,不用再解釋,直接從內存中取出機器碼就可以執行了,這樣提高了不少的效率。

            在JDK1.1時代,Java平臺分為PersonalJava與EmbeddedJava,前者比較適用于運算資源和內存豐富的設備,而資源有限者適用于后者。這樣的分類明顯不符合時代發展的潮流,所以,Java平臺處處蘊藏著新的翻天覆地的革命……

            2.J2SE1.2:誕生

            JDK1.2在1998年12月4日的隆重發布,標志著Java2平臺的誕生。Java2的J2SE1.2時代是一個大變革時代,它進行了如下的三大革命:

            * 市場推廣革命

            在Java1.0或者1.1中,稱API庫為JDK,但為了方便市場推廣,Sun公司在Java1.2版以后將JDK1.2改名為J2SDK,將Java改名為Java 2。在99年Sun公司還將Java2平臺分為三大塊:J2SE,J2EE,
          J2ME。這次市場推廣革命順應了網絡急速發展的潮流,對Java2平臺的發展起到了很好的催化劑的作用。

            * API供應標準革命

            而隨著供應商的不同,Java的API分為三大類:

            Java Core API:由Sun公司制定的基本的API,所有的Java平臺都應該提供。這就是我們平常所說的Java核心類庫。

            Java Optional API:由Sun公司制定的擴充API,Java平臺可以有選擇地提供。比如, JFC以前是Sun對JDK的功能擴展,不是Java的公共規范。Java2平臺則包含了JFC技術,不需要再擴展了。

            特殊API:由特殊廠商或者組織提供的API。比如,美國法律對出口中國的加解密算法的安全強度有一定的限制,Java平臺中不能包括一些安全強度較高的加密解密算法,所以部分其它國家的公司,如加拿大的BouncyCastle公司等,可以提供一些自己的安全API。

            * API制定過程的革命

            如果你有需求不能通過遵循標準的API來實現,可以向 www.jcp.org 提出制定新的API的請求,經過審核,你的請求可能被通過或者駁回;如果是被通過,則開始進入制定該API的程序。

            J2SE1.2時代進行的這些革命形成的制度一直沿用到現在,對Java技術的發展形成了深遠的影響。

            除了上述的三大革命,Java2 還支持并新增了許多新特性,最受追捧的當屬Swing庫。Swing 是輕量級 的 API,它不但有各式各樣先進的組件,而且連組件風格都可抽換。Swing 出現之后,大家很快地就不太使用 AWT 了。但請不要以為 Swing 是用來取代 AWT 的,其實 Swing 是架構在 AWT 之上的, Swing 的出現只是減少程序員直接使用 AWT 的機會,而不會讓 AWT 消失。Java2 還廢棄了一些API,最重要的莫過于Thread類中對suspend(),resume()和stop()等方法的廢棄。由于JDK1.1的集合類庫中的Vector類和HashTable類都考慮了同步,在平常的使用中影響效率,所以Java2專門添加了對應的非同步類,并完善了集合類庫。

            Java2平臺能夠得到廣泛的應用,還應歸功于這個時期的一些優秀書籍,比如著名的<<Core Java2>>(卷一和卷二),該書隨著JDK版本的變化已經出到第六版。

            3. J2SE1.3:拓廣

            Java2平臺推出后,得到了市場的強烈反響,所以,在2000年5月8日推出的J2SE1.3對J2SE1.2的改進,主要是對各種已有API的加強和對新API的拓展。

            數字運算: 加入了java.lang.StrictMath,方便我們的一般的數字運算。

            新的Timer API:相信大家對其中的java.util.Timer和java.util.TimerTask一定不陌生。

            Collections包:??加入了一些新的API,方便我們的使用。

            虛擬機停止鉤子:J2SE1.3還加入了一個強大的功能,那就是虛擬機停止鉤子(Virtual Machine Shutdown Hooks),這個功能使得我們能夠在虛擬機停止時完成我們自己的操作,比如關閉網絡連接或者保存會話狀態或者清除臨時文件等等。

            DNS服務:在JNDI接口方面,加入了一個DNS服務的實現。

            Jini實現:J2SE1.3包含了一個Jini實現,這使得我們可以方便地把諸如打印機、攝像機和磁盤驅動設備插入現有網絡中,并且能自動搜索已在網上的設備可以提供的服務并享用這些服務。

            XML支持:由于計算機網絡和XML技術的快速發展, J2SE1.3在Optional API中引入了Java API for XML包。

            HotSpot虛擬機:J2SE1.3引入了HotSpot虛擬機。在solaris版的JDK1.3中,已經不支持傳統的虛擬機,而windows版的JDK1.3同時支持傳統虛擬機和HotSpot虛擬機。

            從上面的分析可以看出,J2SE1.3主要是對J2SE1.2查漏補缺和拓展新的API。從應用領域方面考慮,J2SE1.3已經涵蓋了數據庫、WEB、多媒體、網絡、電話、影像、加解密、圖形等等大部分的信息技術領域。

            在這個時期Java2還有一個重要活動就是推出SCSL(Sun社區源代碼許可)許可協議。Sun公司
          開放源代碼項目的“女1號”Danese Cooper在1999年加入公司,負責Sun(包括Java)和開放源代碼社區之間的協調工作。Sun一直盡可能在贏利和開放源代碼之間尋求更好的平衡。
          在J2SE1.3時代,Java2平臺得到了充分的發展,各大應用服務器在這個時代漸漸成熟并被廣泛采納,而Java2相關的培訓和書籍更是如火如荼,《Thinking in Java》當屬不得不推薦的一本。

            4. J2SE1.4:快速

            J2SE1.4平臺的推出發生在2002年2月13日,由于此前在Java平臺和.Net平臺間發生了規模浩大的孰優孰劣的論戰,而論戰中,Java平臺最大的缺點就是性能問題,所以J2SE1.4平臺把性能的改善放在了最重要的位置。

            HotSpot虛擬機: HotSpot虛擬機能夠很大程度上提高性能,所以J2SE1.4已經不支持傳統的虛擬機。現在,啟動應用程序應該通過-client或者-server選項來啟動,如果你還是通過-classic選項來啟動,會收到這樣的錯誤提示:”Error: Classic VM no longer supported。”

            鎖機制: 由于舊版的HotSpot虛擬機的鎖機制會導制嚴重的性能和功能問題,J2SE1.4已經改寫了該鎖機制。

            安全API: Java Cryptography Extension(JCE),Java Secure Socket Extension(JSSE)和Java Authentication and Authorization(JAAS)這三大安全API從optional API移到了core API中。這樣,J2SE1.4的安全域(SecureRandom)實現可以利用操作系統提供的安全機制,以便縮短應用程序的啟動時間。同時從optional API移到core API的功能還有XML處理API和JDBC2.0 API。

            RandomAccess標記接口: 加入了RandomAccess標記接口,如果一個List實現了該接口,則表示它支持快速的隨機訪問,這樣可以提高List訪問的速度。

            LinkedHashMap: 加入了LinkedHashMap,這是一個插入排序的Map實現,但它的運行速度和HashMap一樣快。

            反射: 很多產品中都要使用反射(Reflection)機制,但大家知道,反射是相當耗時的,所以,J2SE1.4中重寫了java.lang.reflect.Field、java.lang.reflect.Method.invoke()、java.lang.reflect.Constructor.newInstance()和Class.newInstance()等方法,使得我們利用反射也能寫出高性能的應用程序。

            64位計算: J2SE1.4支持64位計算。64位支持使J2SE1.4可以使用超過幾百GB的內存,而以前的版本僅可以使用4G以內的內存。內存使用的擴大可以提高程序的運行效率。

            新的I/O API: J2SE1.4在API層面最大的變動,就是它更新了原有的java.io包,以及加入了一組更有效率更多功能的新的I/O API。舊的I/O處理是以串流(stream)的方式來存取的,以字節為單位,而新的I/O處理是以塊(block)的方式來存取的。一個塊可能包含了512字節,而磁盤的存取本就是一個塊一個塊來進行的,所以新的I/O處理方式對于底層底數據存取更自然更有效率。

            斷言和日志處理: J2SE1.4版本在Java語言層面上加入了斷言(assert關鍵字),在API層面上加入日志處理API,這些為程序的調試提供了強有力的支持 。

            從上面的分析可以看出,Java 2平臺在經過數年的發展后,已經比較成熟穩定,J2SE1.4主要是對平臺的性能進行較多的考慮和修改。在分布式程序方面,1.4版比1.3版的運行效率提高了一半以上;而在客戶端程序方面,1.4版比1.3版的效率提高了1/3。當然,除了考慮運行效率,J2SE1.4還有其它方面的改進,如推出了一個全新的運行Java應用程序的方法Java Web Start,該方法克服了Java Applet的安全性限制的問題和Java Application的軟件發布難的問題,并結合了上面兩種方法的好處,為Java軟件客戶提供了非常友好的使用體驗。

            J2SE1.4版是J2SE第一個參與了 Java共同體過程(JCP)的J2SE版本。 象Borland、Compaq、Fujitsu、 SAS、 Symbian、 IBM這樣的公司,和Sun一起定義并發展了J2SE 1.4規范。在開放、良好的文檔編撰與管理的過程中,形成了一個高質量的、代表了Java共同體的多樣性的規范。J2SE1.4的Specification Lead是Doug Kramer。Doug Kramer是優秀的Java開發人員和著名的教育培訓專家,他同時還是J2SE1.4.2的Specification Lead 和J2SE1.5的JVM的Specification Lead。

            5. J2SE5.0:易用

            在2004年十月J2SE5.0發布的時候,SUN公司這樣解釋這次版本名稱不是J2SE1.5而是J2SE5.0的原因:“從Java誕生至今已有9年時間,而從有J2SE算起也有5個年頭了;在這樣的背境下,將該版本號從1.5改為5.0可以更好的反映出新版的J2SE的成熟度、穩定性、可伸縮性、安全性。”

            J2SE的這次變更之重大和意義之深遠,的確也值得我們為之把版本號變換到J2SE5.0。我們再看看Sun公司網站對J2SE5.0的features描述:“通過增強Java平臺的力量,允許開發者更容易地使用,Java編程語言的這些改進將吸引大量各種Java開發者”,這是“Java技術發展歷程的一個重要里程碑” 。從這個描述我們可以看出,J2SE5.0最大的目標是通過提供易用性而吸引各種開發者(當然包括以前的C/C++開發者) ,而它對以前版本的修改并不僅僅是API的升級,而且包括對Java語言層面的改進。

            訪問環境變量: 最初的Java語言有一個訪問環境變量的方法System.getenv(),但因為Java宣稱的”Write Once,Run AnyWhere”特性,所以在JDK1.0中去掉了這個能夠訪問平臺專有信息的方法。在J2SE5.0中,它又來了,并有所擴充。由此可見J2SE5.0對編程方便性的重視程度。

            泛型 J2SE5.0提供了強大的泛型機制,讓程序員可以減少代碼重復,這個變化應該可以吸引小部分的C#開發人員吧。

            增強的for循環 為了克服普通for循環的代碼臃腫特點,J2SE5.0提供了增強的for循環,我們現在可以這樣寫一個for循環:

          public void printAll(Collection<String> coll)
          {
          for(String str : coll)
          {
          System.out.println(str);
          }
          }

            怎么樣?是不是簡單了很多?

            自動的裝箱/拆箱 我們以前手工的做裝箱(Boxing)/拆箱(unBoxing)操作時,是不是很煩?放心,J2SE5.0提供了自動的裝箱/拆箱操作,我們現在可以寫如下的代碼:

          public void boxing(int i)
          {
          ArrayList<Integer> list=new ArrayList<Integer>();
          list.add(0,i);
          System.out.println(“i的值是”+list.get(0));
          }

            可變參數數目 J2SE5.0 開始支持Varargs(不固定自變量個數),J2SE5.0中還加入了以前拋棄的
          枚舉和C風格的格式化輸出,這應該是為了吸引以前的C開發者吧。畢竟,在C開發中枚舉和格式化輸出用的是太多了。

            并發 J2SE5.0中加入了java.util.concurrent包,并向集合框架中加入了Queue接口,J2SE5.0還為各種集合提供了并發情況下的實現。
          Properties類增強 由于XML的普及性應用,J2SE5.0為java.util.Properties類加入了從XML文件中裝載屬性和把屬性值存儲到XML文件中的方法。

            Annotation功能 J2SE5.0提供了注解(annotation)/元數據(metadata)功能,相信以后的大部分應用產品都將充分利用它的注解而實現產品的各種特性。

            其它 J2SE5.0還在多線程(并發機制)、安全、國際化、UI等方面進行了大規模的變更,使得我們能夠更方便地進行Java開發。

            其實,上面的這些變更,并不是我們程序員非要不可的內容。我們完全可以通過自己的辦法來達到這些變更實現的功能。但J2SE5.0的目標就是讓我們程序員能夠更加方便地進行開發,所以,我們在基于J2SE5.0開發時,應該能夠明顯的體會到它的易用性。

            6.展望

            時至今日,J2SE已經發展為一個覆蓋面廣、效率高、易用性強的技術平臺,但Java并沒有停止前進的腳步。Mustang版本的J2SE正在緊鑼密鼓的開發當中,按以前的慣例,每兩年會發布一個全新的J2SE版本,所以Mustang開發版對應的J2SE6.0發布版將在2006年完成。

            J2SE6.0的Specification Lead是Sun公司老資格的開發者Mark Reinhold,我們在J2SE1.2中就能看到他的影子。Mark Reinhold曾經是NIO(新的I/O處理) API的Specification Lead,現在是Sun的J2SE架構師與總工程師。Mark Reinhold透露說,J2SE6.0將更易于管理,可以給外部的管理軟件提供更多信息。它可以讓調試軟件在程序運行的時候進行檢查,而不是在運行之前,這樣更容易找到問題所在。他說,J2SE6.0 將會更好地和圖形用戶界面集成,包括微軟即將發布的Windows 版本Longhorn。

            2005年3月23日是Java技術
          十周年慶典日,在這十年的發展中,Java平臺吸引了四百萬開發者,在網絡計算遍及全球的今天,更是有17.5億臺設備使用了Java技術。作為Java技術的基礎,J2SE的功績不可掩沒,我們期望J2SE伴隨Java平臺一路走好!
          posted on 2005-08-01 08:20 黑武士 閱讀(123) 評論(0)  編輯  收藏 所屬分類: 業界新聞
          主站蜘蛛池模板: 旬阳县| 大厂| 翁牛特旗| 浪卡子县| 阿坝县| 衡阳市| 永昌县| 靖江市| 灵台县| 凤庆县| 永川市| 大城县| 阳朔县| 岳普湖县| 福建省| 福贡县| 雅江县| 固原市| 通道| 江华| 石柱| 天柱县| 会宁县| 青神县| 玉林市| 常山县| 中宁县| 巴南区| 明光市| 玉门市| 赣州市| 隆林| 泉州市| 曲松县| 旌德县| 耒阳市| 凤翔县| 祁连县| 马公市| 龙川县| 仪陇县|