Java是一種廣泛使用的計算機編程語言,,擁有跨平臺、面向對象,、泛型編程的特,,廣泛應用于企業(yè)級Web應用開發(fā)和移動應用開發(fā)。 任職于太陽微系統(tǒng)的詹姆斯·高斯林等人于1990年代初開發(fā)Java語言的雛形,,最初被命名為Oak,,目標設置在家用電器等小型系統(tǒng)的程序語言,應用在電視機,、電話,、鬧鐘、烤面包機等家用電器的控制和通信,。由于這些智能化家電的市場需求沒有預期的高,,Sun公司放棄了該項計劃。隨著1990年代互聯(lián)網(wǎng)的發(fā)展,,Sun公司看見Oak在互聯(lián)網(wǎng)上應用的前景,,于是改造了Oak,于1995年5月以Java的名稱正式發(fā)布,。Java伴隨著互聯(lián)網(wǎng)的迅猛發(fā)展而發(fā)展,,逐漸成為重要的網(wǎng)絡編程語言。 Java編程語言的風格十分接近C++語言,。繼承了C++語言面向對象技術的核心,,Java舍棄了C++語言中容易引起錯誤的指針,,改以引用取代,同時移除原C++與原來運算符重載,,也移除多重繼承特性,,改用接口取代,增加垃圾回收器功能,。在Java SE 1.5版本中引入了泛型編程,、類型安全的枚舉、不定長參數(shù)和自動裝/拆箱特性,。太陽微系統(tǒng)對Java語言的解釋是:“Java編程語言是個簡單,、面向對象、分布式,、解釋性,、健壯、安全與系統(tǒng)無關,、可移植,、高性能、多線程和動態(tài)的語言” Java不同于一般的編譯語言或直譯語言,。它首先將源代碼編譯成字節(jié)碼,,然后依賴各種不同平臺上的虛擬機來解釋執(zhí)行字節(jié)碼,從而實現(xiàn)了“一次編寫,,到處運行”的跨平臺特性,。在早期JVM中,這在一定程度上降低了Java程序的運行效率,。但在J2SE1.4.2發(fā)布后,,Java的運行速度有了大幅提升。 與傳統(tǒng)類型不同,,Sun公司在推出Java時就將其作為開放的技術,。全球數(shù)以萬計的Java開發(fā)公司被要求所設計的Java軟件必須相互兼容?!癑ava語言靠群體的力量而非公司的力量”是 Sun公司的口號之一,,并獲得了廣大軟件開發(fā)商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同,,此外,,微軟公司后來推出了與之競爭的.NET平臺以及模仿Java的C#語言。后來Sun公司被甲骨文公司并購,,Java也隨之成為甲骨文公司的產(chǎn)品,。 現(xiàn)時,移動操作系統(tǒng)Android大部分的代碼采用Java 編程語言編程,。 Java的發(fā)明人詹姆斯·高斯林 Java 發(fā)展史 語言最開始只是Sun計算機(Sun MicroSystems)公司在1990年12月開始研究的一個內(nèi)部項目,。Sun計算機公司的一個叫做帕特里克·諾頓的工程師被公司自己開發(fā)的C++和 Duke,,Java語言的吉祥物C語言編譯器搞得焦頭爛額,因為其中的API極其難用,。帕特里克決定改用NeXT,,同時他也獲得了研究公司的一個叫做“Stealth計劃”的項目的機會。 “Stealth計劃”后來改名為“Green計劃”,,詹姆斯·高斯林和麥克·舍林丹也加入了帕特里克的工作小組。他們和其他幾個工程師一起在加利福尼亞州門羅帕克市沙丘路的一個小工作室里面研究開 發(fā)新技術,,瞄準下一代智能家電(如微波爐)的程序設計,,Sun公司預料未來科技將在家用電器領域大顯身手。團隊最初考慮使用C++語言,,但是很多成員包括Sun的首席科學家比爾·喬伊,,發(fā)現(xiàn)C++和可用的API在某些方面存在很大問題,。 工作小組使用的是嵌入式系統(tǒng),可以用的資源極其有限,。很多成員發(fā)現(xiàn)C++太復雜以至很多開發(fā)者經(jīng)常錯誤使用。他們發(fā)現(xiàn)C++缺少垃圾回收系統(tǒng),,還有可移植的安全性,、分布程序設計、和多線程功能,。最后,,他們想要一種易于移植到各種設備上的平臺。 根據(jù)可用的資金,,喬伊決定開發(fā)一種集C語言和Mesa語言大成的新語言,,在一份報告上,喬伊把它叫做“未來”,,他提議Sun公司的工程師應該在C++的基礎上,,開發(fā)一種面向對象的環(huán)境。最初,,高斯林試圖修改和擴展C++的功能,,他自己稱這種新語言為C++ ++ –,但是后來他放棄了,。他將要創(chuàng)造出一種全新的語言,,被他命名為“Oak”(橡樹),以他的辦公室外的橡樹命名,。 就像很多開發(fā)新技術的秘密工程一樣,,工作小組沒日沒夜地工作到了1993年的夏天,他們能夠演示新平臺的一部分了,,包括Green操作系統(tǒng),,Oak的程序設計語言,,類庫及其硬件。最初的嘗試是面向一種類PDA設備,,被命名為Star7,,這種設備有鮮艷的圖形界面和被稱為“Duke”的智能代理來幫助用戶。1992年12月3日,,這臺設備進行了展示,。 同年11月,Green計劃被轉化成了“FirstPerson有限公司”,,一個Sun公司的全資子公司,,團隊也被重新安排到了帕洛阿爾托。FirstPerson團隊對建造一種高度交互的設備感興趣,,當時代華納發(fā)布了一個關于電視機頂盒的征求提議書時(Request for proposal),,F(xiàn)irstPerson改變了他們的目標,作為對征求意見書的響應,,提出了一個機頂盒平臺的提議,。但是有線電視業(yè)界覺得FirstPerson的平臺給予用戶過多的控制權,因此FirstPerson的投標敗給了SGI,。與3DO公司的另外一筆關于機頂盒的交易也沒有成功,,由于他們的平臺不能在電視工業(yè)產(chǎn)生任何效益,公司被并回Sun公司,。 Java和互聯(lián)網(wǎng)[編輯] 1994年6月,,在經(jīng)歷了一場歷時三天的腦力激蕩的討論后,約翰·蓋吉,、詹姆斯·高斯林,、比爾·喬伊、帕特里克·諾頓,、韋恩·羅斯因和埃里克·斯庫米,,團隊決定再一次改變努力的目標,這次他們決定將該技術應用于萬維網(wǎng),。他們認為隨著Mosaic瀏覽器的到來,,因特網(wǎng)正在向同樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網(wǎng)中看到的,。作為原型,,帕特里克·諾頓寫了一個小型萬維網(wǎng)瀏覽器,WebRunner,,后來改名為HotJava[12],。 1994年10月,HotJava和Java平臺為公司高層進行演示。1994年,,Java 1.0a版本已經(jīng)可以提供下載,,但是Java和HotJava瀏覽器的第一次公開發(fā)布卻是在1995年3月23日SunWorld大會上進行的。升陽公司的科學指導約翰·蓋吉宣告Java技術,。這個發(fā)布是與網(wǎng)景公司的執(zhí)行副總裁馬克·安德森的驚人發(fā)布一起進行的,,宣布網(wǎng)景將在其瀏覽器中包含對Java的支持。1996年1月,,升陽公司成立了Java業(yè)務集團,,專門開發(fā)Java技術。 Java和“Java”[編輯] 由于商標搜索顯示,,Oak已被一家顯示卡制造商注冊,。于是同年,Oak被改名為Java,。當使用十六進制編輯器打開由Java源代碼編譯出的二進制文件(.class文件)的話,最前面的32位將顯示為CA FE BA BE,,即詞組“CAFE BABE”(咖啡屋寶貝),。 Java近況[編輯] 一套Java編輯器軟件 J2SE環(huán)境與CDC的關連 JVM的所在角色 JSPX網(wǎng)頁的概念 在流行幾年之后,Java在瀏覽器中的地位被逐步侵蝕,。它在簡單交互性動畫方面的用途已經(jīng)完全被Adobe公司的Flash排擠,,2005年Java傾向只被用于雅虎游戲那樣的更為復雜的應用程序。Java同時遭受到來自微軟的反對,,他們決定在新版本的Internet Explorer和Windows中不再附帶Java平臺,。 與此相反,在萬維網(wǎng)的服務器端和手持設備上,,Java變得更加流行,。很多網(wǎng)站在后端使用JSP和其他的Java技術。 在桌面系統(tǒng)上,,獨立的Java程序還是相對少見,,這是因為Java平臺的運行開銷較大,而許多人的電腦上沒有安裝Java,,由于網(wǎng)絡帶寬在以前較小,,下載Java曾經(jīng)是個耗時的事情。但是隨著計算機計算能力,、網(wǎng)絡帶寬在10年中獲取了很大的進步,,同時虛擬機和編譯器的質量得到了提高,許多應用程序得到了廣泛的使用,,包括: 開源軟件: NetBeans和Eclipse等軟件開發(fā)工具 Android操作系統(tǒng) JEdit Azureus BitTorrent客戶端,。 JNode操作系統(tǒng) Apache軟件基金會的Ant、Derby、Hadoop,、Jakarta,、POI和Tomcat JBoss和GlassFish應用服務器
商業(yè)軟件: 還有許多用Java寫的軟件,,可以在http://www. 找到,。在以下網(wǎng)頁可以看到非常多用Java寫的程序:http://java./products/ 下面有大量用Java Swing開發(fā)的桌面Java程序 http://java./products/jfc/tsc/sightings/ 目前Java提供以下三個版本: Java Platform, Enterprise Edition(Java EE:Java平臺企業(yè)版) Java Platform, Standard Edition(Java SE:Java平臺標準版) Java Platform, Micro Edition(Java ME:Java平臺微型版) Java Platform, Card Edition
Java開放源代碼項目[編輯] 2006年SUN在JavaOne公布Java 開放源代碼項目,并推出OpenJDK項目[13],。Java虛擬機,、Java編譯器和Java類庫以GNU通用公共許可證公開。 版本歷史[編輯] 主條目:Java版本歷史 1995年5月23日,,Java語言誕生 1996年1月,,第一個JDK–JDK1.0誕生 1996年4月,10個最主要的操作系統(tǒng)供應商申明將在其產(chǎn)品中嵌入JAVA技術 1996年9月,,約8.3萬個網(wǎng)頁應用了JAVA技術來制作 1997年2月18日,,JDK1.1發(fā)布 1997年4月2日,JavaOne會議召開,,參與者逾一萬人,,創(chuàng)當時全球同類會議規(guī)模之紀錄 1997年9月,JavaDeveloperConnection社區(qū)成員超過十萬 1998年2月,,JDK1.1被下載超過2,000,000次 1998年12月8日,,JAVA2企業(yè)平臺J2EE發(fā)布 1999年6月,SUN公司發(fā)布Java的三個版本:標準版(J2SE),、企業(yè)版(J2EE)和微型版(J2ME) 2000年5月8日,,JDK1.3發(fā)布 2000年5月29日,JDK1.4發(fā)布 2001年6月5日,,NOKIA宣布,,到2003年將出售1億部支持Java的手機 2001年9月24日,J2EE1.3發(fā)布 2002年2月26日,,J2SE1.4發(fā)布,,自此Java的計算能力有了大幅提升 2004年9月30日18:00PM,J2SE1.5發(fā)布,,成為Java語言發(fā)展史上的又一里程碑,。為了表示該版本的重要性,J2SE1.5更名為Java SE 5.0 2005年6月,,JavaOne大會召開,,SUN公司公開Java SE 6。此時,,Java的各種版本已經(jīng)更名,,以取消其中的數(shù)字“2”:J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME 2006年12月,,SUN公司發(fā)布JRE6.0 2009年12月,,SUN公司發(fā)布Java EE 6 2010年11月,由于Oracle公司對于Java社區(qū)的不友善,,因此Apache揚言將退出JCP[14] 2011年7月28日,,Oracle公司發(fā)布Java SE 7 2014年3月18日,Oracle公司發(fā)表Java SE 8 2017年9月21日,,Oracle公司發(fā)表Java SE 9
語言特性[編輯] Java之所以被開發(fā),,是要達到以下五個目的: Java技術主要分成幾個部分:Java語言,、Java運行環(huán)境、類庫,。一般情況下說Java時并不區(qū)分指的是哪個部分,。 Java在1.5版本時,做了重大改變,,Sun公司并1.5版本重命名為Java 5.0,。 面向對象[編輯] Java的特點之一就是面向對象,是程序設計方法的一種,。“面向對象程序設計語言”的核心之一就是開發(fā)者在設計軟件的時候可以使用自定義的類型和關聯(lián)操作,。代碼和數(shù)據(jù)的實際集合體叫做“對象”,。一個對象可以想象成綁定了很多“行為(代碼)”和“狀態(tài)(數(shù)據(jù))”的物體。對于數(shù)據(jù)結構的改變需要和代碼進行通信然后操作,,反之亦然,。面向對象設計讓大型軟件工程的計劃和設計變得更容易管理,能增強工程的健康度,,減少失敗工程的數(shù)量,。 跨平臺性[編輯] Java語言的第二個特性就是跨平臺性,也就是說使用Java語言編寫的程序可以在編譯后不用經(jīng)過任何更改,,就能在任何硬件設備條件下運行,。這個特性經(jīng)常被稱為“一次編譯,到處運行”,。 執(zhí)行Java應用程序必須安裝爪哇運行環(huán)境(Java Runtime Environment,,JRE),JRE內(nèi)部有一個Java虛擬機(Java Virtual Machine,,JVM)以及一些標準的類庫(Class Library),。通過JVM才能在電腦系統(tǒng)執(zhí)行Java應用程序(Java Application),這與.Net Framework的情況一樣,所以電腦上沒有安裝JVM,,那么這些程序將不能夠執(zhí)行,。 實現(xiàn)跨平臺性的方法是大多數(shù)編譯器在進行Java語言程序的編碼時候會生成一個用字節(jié)碼寫成的“半成品”,這個“半成品”會在Java虛擬機(解釋層)的幫助下運行,,虛擬機會把它轉換成當前所處硬件平臺的原始代碼,。之后,Java虛擬機會打開標準庫,,進行數(shù)據(jù)(圖片,、線程和網(wǎng)絡)的訪問工作。主要注意的是,,盡管已經(jīng)存在一個進行代碼翻譯的解釋層,,有些時候Java的字節(jié)碼代碼還是會被JIT編譯器進行二次編譯。 有些編譯器,,比如GCJ,,可以自動生成原始代碼而不需要解釋層。但是這些編譯器所生成的代碼只能應用于特定平臺,。并且GCJ目前只支持部分的Java API,。 甲骨文公司對于Java的許可是“全兼容的”,這也導致了微軟和升陽關于微軟的程序不支持RMI和JNI接口,、并且增加特性為己所用的法律爭端,。升陽最終贏得了官司,獲得了大約兩千萬美元的賠償,,法院強制要求微軟執(zhí)行升陽公司關于Java的許可要求,。作為回應,微軟不再在Windows系統(tǒng)中捆綁Java,,最新的Windows版本,,Windows Vista和Internet Explorer 7.0版本也不再提供對于Java應用程序和控件的支持。但是升陽公司和其他使用Java運行時系統(tǒng)的公司在Windows操作系統(tǒng)下對用戶提供無償?shù)牡谌讲寮统绦蛑С帧?/p> Java語言使用解釋層最初是為了輕巧性,。所以這些程序的運行效率比C語言和C++要低很多,,用戶也對此頗有微詞。很多最近的調查顯示Java的程序運行速度比幾年前要高出許多,,有些同樣功能的程序的效率甚至超過了C++和C語言編寫的程序[來源請求],。 Java語言在最開始應用的時候是沒有解釋層的,所有需要編譯的代碼都直接轉換成機器的原始代碼,。這樣做的后果就是獲得了最佳的性能,,但是程序臃腫異常。從JIT技術開始,,Java的程序都經(jīng)過一次轉換之后才變成機器碼,。很多老牌的第三方虛擬機都使用一種叫做“動態(tài)編譯”的技術,,也就是說虛擬機實時監(jiān)測和分析程序的運行行為,同時選擇性地對程序所需要的部分進行編譯和優(yōu)化,。所有這些技術都改善了代碼的運行速度,,但是又不會讓程序的體積變得失常。 程序的輕便性事實上是軟件編寫很難達到的一個目標,,Java雖然成功地實現(xiàn)了“一次編譯,,到處運行”,但是由于平臺和平臺之間的差異,,所編寫的程序在轉換代碼的時候難免會出現(xiàn)微小的,、不可察覺的錯誤和意外。有些程序員對此非常頭疼,,他們嘲笑Java的程序不是“一次編譯,,到處運行”,而是“一次編譯,,到處調試”,。以Java AWT為例,早期Java AWT內(nèi)提供的按鈕,、文字區(qū)等均是以計算機系統(tǒng)所默認的樣式而顯示,。這令Java程序在有些沒有提供圖案的計算機系統(tǒng)產(chǎn)生錯誤(在Microsoft Windows設有窗口管理器,在一些Linux distribution則沒有),。后來SUN公司針對Java AWT一些問題而推出Java Swing,。 平臺無關性讓Java在服務器端軟件領域非常成功。很多服務器端軟件都使用Java或相關技術建立,。 自動垃圾回收(Garbage Collection)[編輯] C++語言被用戶詬病的原因之一是大多數(shù)C++編譯器不支持垃圾收集機制,。通常使用C++編程的時候,程序員于程序中初始化對象時,,會在主機內(nèi)存堆棧上分配一塊內(nèi)存與地址,,當不需要此對象時,,進行析構或者刪除的時候再釋放分配的內(nèi)存地址,。如果對象是在堆棧上分配的,而程序員又忘記進行刪除,,那么就會造成內(nèi)存泄漏(Memory Leak),。長此以往,程序運行的時候可能會生成很多不清除的垃圾,,浪費了不必要的內(nèi)存空間,。而且如果同一內(nèi)存地址被刪除兩次的話,程序會變得不穩(wěn)定,,甚至崩潰,。因此有經(jīng)驗的C++程序員都會在刪除之后將指針重置為NULL,,然后在刪除之前先判斷指針是否為NULL。 C++中也可以使用“智能指針”(Smart Pointer)或者使用C++托管擴展編譯器的方法來實現(xiàn)自動化內(nèi)存釋放,,智能指針可以在標準類庫中找到,,而C++托管擴展被微軟的Visual C++ 7.0及以上版本所支持。智能指針的優(yōu)點是不需引入緩慢的垃圾收集機制,,而且可以不考慮線程安全的問題,,但是缺點是如果不善使用智能指針的話,性能有可能不如垃圾收集機制,,而且不斷地分配和釋放內(nèi)存可能造成內(nèi)存碎片,,需要手動對堆進行壓縮。除此之外,,由于智能指針是一個基于模板的功能,,所以沒有經(jīng)驗的程序員在需要使用多態(tài)特性進行自動清理時也可能束手無策。 Java語言則不同,,上述的情況被自動垃圾收集功能自動處理,。對象的創(chuàng)建和放置都是在內(nèi)存堆棧上面進行的。當一個對象沒有任何引用的時候,,Java的自動垃圾收集機制就發(fā)揮作用,,自動刪除這個對象所占用的空間,釋放內(nèi)存以避免內(nèi)存泄漏,。 注意程序員不需要修改finalize 方法,,自動垃圾收集也會發(fā)生作用。但是內(nèi)存泄漏并不是就此避免了,,當程序員疏忽大意地忘記解除一個對象不應該有的引用時,,內(nèi)存泄漏仍然不可避免。 不同廠商,、不同版本的JVM中的內(nèi)存垃圾回收機制并不完全一樣,,通常越新版本的內(nèi)存回收機制越快,IBM,、BEA,、SUN等等開發(fā)JVM的公司都曾宣稱過自己制造出了世界上最快的JVM[來源請求],JVM性能的世界紀錄也在不斷的被打破并提高,。 IBM有一篇有關Java內(nèi)存回收機制比不激活垃圾收集機制的C++內(nèi)存處理快數(shù)倍的技術文章[15],,而著名的Java技術書籍《Java編程思想》(Thinking in Java)也有一段論述Java內(nèi)存及性能達到甚至超過C++的章節(jié)[16]。 基本語法[編輯] 編寫Java程序前應注意以下幾點: 大小寫敏感:Java是大小寫敏感的,,這就意味著標識符Hello與hello是不同的,。 類名:對于所有的類來說,類名的首字母應該大寫,。如果類名由若干單詞組成,,那么每個單詞的首字母應該大寫,,例如MyFirstJavaClass。 方法名:所有的方法名都應該以小寫字母開頭,。如果方法名含有若干單詞,,則后面的每個單詞首字母大寫,例如myFirstJavaMethod,。 源文件名:源文件名必須和類名相同,。當保存文件的時候,你應該使用類名作為文件名保存(切記Java是大小寫敏感的),,文件名的后綴為.java,。(如果文件名和類名不相同則會導致編譯錯誤)。 主方法入口:所有的Java程序由public static void main(String[] args)方法開始執(zhí)行,。 下一篇為大家介紹 Java語法應用,。Java是一種廣泛使用的計算機編程語言,擁有跨平臺,、面向對象,、泛型編程的特,廣泛應用于企業(yè)級Web應用開發(fā)和移動應用開發(fā),。 任職于太陽微系統(tǒng)的詹姆斯·高斯林等人于1990年代初開發(fā)Java語言的雛形,,最初被命名為Oak,目標設置在家用電器等小型系統(tǒng)的程序語言,,應用在電視機,、電話、鬧鐘,、烤面包機等家用電器的控制和通信,。由于這些智能化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃,。隨著1990年代互聯(lián)網(wǎng)的發(fā)展,,Sun公司看見Oak在互聯(lián)網(wǎng)上應用的前景,于是改造了Oak,,于1995年5月以Java的名稱正式發(fā)布,。Java伴隨著互聯(lián)網(wǎng)的迅猛發(fā)展而發(fā)展,逐漸成為重要的網(wǎng)絡編程語言,。 Java編程語言的風格十分接近C++語言,。繼承了C++語言面向對象技術的核心,,Java舍棄了C++語言中容易引起錯誤的指針,,改以引用取代,同時移除原C++與原來運算符重載,,也移除多重繼承特性,,改用接口取代,,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型編程,、類型安全的枚舉,、不定長參數(shù)和自動裝/拆箱特性。太陽微系統(tǒng)對Java語言的解釋是:“Java編程語言是個簡單,、面向對象,、分布式、解釋性,、健壯,、安全與系統(tǒng)無關、可移植,、高性能,、多線程和動態(tài)的語言” Java不同于一般的編譯語言或直譯語言。它首先將源代碼編譯成字節(jié)碼,,然后依賴各種不同平臺上的虛擬機來解釋執(zhí)行字節(jié)碼,,從而實現(xiàn)了“一次編寫,到處運行”的跨平臺特性,。在早期JVM中,,這在一定程度上降低了Java程序的運行效率。但在J2SE1.4.2發(fā)布后,,Java的運行速度有了大幅提升,。 與傳統(tǒng)類型不同,Sun公司在推出Java時就將其作為開放的技術,。全球數(shù)以萬計的Java開發(fā)公司被要求所設計的Java軟件必須相互兼容,。“Java語言靠群體的力量而非公司的力量”是 Sun公司的口號之一,,并獲得了廣大軟件開發(fā)商的認同,。這與微軟公司所倡導的注重精英和封閉式的模式完全不同,此外,,微軟公司后來推出了與之競爭的.NET平臺以及模仿Java的C#語言,。后來Sun公司被甲骨文公司并購,Java也隨之成為甲骨文公司的產(chǎn)品,。 現(xiàn)時,,移動操作系統(tǒng)Android大部分的代碼采用Java 編程語言編程。 Java的發(fā)明人詹姆斯·高斯林 Java 發(fā)展史 語言最開始只是Sun計算機(Sun MicroSystems)公司在1990年12月開始研究的一個內(nèi)部項目,。Sun計算機公司的一個叫做帕特里克·諾頓的工程師被公司自己開發(fā)的C++和 Duke,,Java語言的吉祥物C語言編譯器搞得焦頭爛額,因為其中的API極其難用,。帕特里克決定改用NeXT,,同時他也獲得了研究公司的一個叫做“Stealth計劃”的項目的機會,。 “Stealth計劃”后來改名為“Green計劃”,詹姆斯·高斯林和麥克·舍林丹也加入了帕特里克的工作小組,。他們和其他幾個工程師一起在加利福尼亞州門羅帕克市沙丘路的一個小工作室里面研究開 發(fā)新技術,,瞄準下一代智能家電(如微波爐)的程序設計,Sun公司預料未來科技將在家用電器領域大顯身手,。團隊最初考慮使用C++語言,,但是很多成員包括Sun的首席科學家比爾·喬伊,發(fā)現(xiàn)C++和可用的API在某些方面存在很大問題,。 工作小組使用的是嵌入式系統(tǒng),,可以用的資源極其有限。很多成員發(fā)現(xiàn)C++太復雜以至很多開發(fā)者經(jīng)常錯誤使用,。他們發(fā)現(xiàn)C++缺少垃圾回收系統(tǒng),,還有可移植的安全性、分布程序設計,、和多線程功能,。最后,他們想要一種易于移植到各種設備上的平臺,。 根據(jù)可用的資金,,喬伊決定開發(fā)一種集C語言和Mesa語言大成的新語言,在一份報告上,,喬伊把它叫做“未來”,,他提議Sun公司的工程師應該在C++的基礎上,開發(fā)一種面向對象的環(huán)境,。最初,,高斯林試圖修改和擴展C++的功能,他自己稱這種新語言為C++ ++ –,,但是后來他放棄了,。他將要創(chuàng)造出一種全新的語言,被他命名為“Oak”(橡樹),,以他的辦公室外的橡樹命名,。 就像很多開發(fā)新技術的秘密工程一樣,工作小組沒日沒夜地工作到了1993年的夏天,,他們能夠演示新平臺的一部分了,,包括Green操作系統(tǒng),Oak的程序設計語言,,類庫及其硬件,。最初的嘗試是面向一種類PDA設備,被命名為Star7,這種設備有鮮艷的圖形界面和被稱為“Duke”的智能代理來幫助用戶,。1992年12月3日,這臺設備進行了展示,。 同年11月,,Green計劃被轉化成了“FirstPerson有限公司”,一個Sun公司的全資子公司,,團隊也被重新安排到了帕洛阿爾托,。FirstPerson團隊對建造一種高度交互的設備感興趣,當時代華納發(fā)布了一個關于電視機頂盒的征求提議書時(Request for proposal),,F(xiàn)irstPerson改變了他們的目標,,作為對征求意見書的響應,提出了一個機頂盒平臺的提議,。但是有線電視業(yè)界覺得FirstPerson的平臺給予用戶過多的控制權,,因此FirstPerson的投標敗給了SGI。與3DO公司的另外一筆關于機頂盒的交易也沒有成功,,由于他們的平臺不能在電視工業(yè)產(chǎn)生任何效益,,公司被并回Sun公司。 Java和互聯(lián)網(wǎng)[編輯] 1994年6月,,在經(jīng)歷了一場歷時三天的腦力激蕩的討論后,,約翰·蓋吉、詹姆斯·高斯林,、比爾·喬伊,、帕特里克·諾頓、韋恩·羅斯因和埃里克·斯庫米,,團隊決定再一次改變努力的目標,,這次他們決定將該技術應用于萬維網(wǎng)。他們認為隨著Mosaic瀏覽器的到來,,因特網(wǎng)正在向同樣的高度互動的遠景演變,,而這一遠景正是他們在有線電視網(wǎng)中看到的。作為原型,,帕特里克·諾頓寫了一個小型萬維網(wǎng)瀏覽器,,WebRunner,后來改名為HotJava[12],。 1994年10月,,HotJava和Java平臺為公司高層進行演示。1994年,,Java 1.0a版本已經(jīng)可以提供下載,,但是Java和HotJava瀏覽器的第一次公開發(fā)布卻是在1995年3月23日SunWorld大會上進行的。升陽公司的科學指導約翰·蓋吉宣告Java技術。這個發(fā)布是與網(wǎng)景公司的執(zhí)行副總裁馬克·安德森的驚人發(fā)布一起進行的,,宣布網(wǎng)景將在其瀏覽器中包含對Java的支持,。1996年1月,升陽公司成立了Java業(yè)務集團,,專門開發(fā)Java技術,。 Java和“Java”[編輯] 由于商標搜索顯示,Oak已被一家顯示卡制造商注冊,。于是同年,,Oak被改名為Java。當使用十六進制編輯器打開由Java源代碼編譯出的二進制文件(.class文件)的話,,最前面的32位將顯示為CA FE BA BE,,即詞組“CAFE BABE”(咖啡屋寶貝)。 Java近況[編輯] 一套Java編輯器軟件 J2SE環(huán)境與CDC的關連 JVM的所在角色 JSPX網(wǎng)頁的概念 在流行幾年之后,,Java在瀏覽器中的地位被逐步侵蝕,。它在簡單交互性動畫方面的用途已經(jīng)完全被Adobe公司的Flash排擠,2005年Java傾向只被用于雅虎游戲那樣的更為復雜的應用程序,。Java同時遭受到來自微軟的反對,,他們決定在新版本的Internet Explorer和Windows中不再附帶Java平臺。 與此相反,,在萬維網(wǎng)的服務器端和手持設備上,,Java變得更加流行。很多網(wǎng)站在后端使用JSP和其他的Java技術,。 在桌面系統(tǒng)上,,獨立的Java程序還是相對少見,這是因為Java平臺的運行開銷較大,,而許多人的電腦上沒有安裝Java,,由于網(wǎng)絡帶寬在以前較小,下載Java曾經(jīng)是個耗時的事情,。但是隨著計算機計算能力,、網(wǎng)絡帶寬在10年中獲取了很大的進步,同時虛擬機和編譯器的質量得到了提高,,許多應用程序得到了廣泛的使用,,包括: 開源軟件: NetBeans和Eclipse等軟件開發(fā)工具 Android操作系統(tǒng) JEdit Azureus BitTorrent客戶端。 JNode操作系統(tǒng) Apache軟件基金會的Ant,、Derby,、Hadoop、Jakarta,、POI和Tomcat JBoss和GlassFish應用服務器
商業(yè)軟件: 還有許多用Java寫的軟件,,可以在http://www. 找到。在以下網(wǎng)頁可以看到非常多用Java寫的程序:http://java./products/ 下面有大量用Java Swing開發(fā)的桌面Java程序 http://java./products/jfc/tsc/sightings/ 目前Java提供以下三個版本: Java Platform, Enterprise Edition(Java EE:Java平臺企業(yè)版) Java Platform, Standard Edition(Java SE:Java平臺標準版) Java Platform, Micro Edition(Java ME:Java平臺微型版) Java Platform, Card Edition
Java開放源代碼項目[編輯] 2006年SUN在JavaOne公布Java 開放源代碼項目,,并推出OpenJDK項目[13],。Java虛擬機、Java編譯器和Java類庫以GNU通用公共許可證公開,。 版本歷史[編輯] 主條目:Java版本歷史 1995年5月23日,,Java語言誕生 1996年1月,第一個JDK–JDK1.0誕生 1996年4月,,10個最主要的操作系統(tǒng)供應商申明將在其產(chǎn)品中嵌入JAVA技術 1996年9月,,約8.3萬個網(wǎng)頁應用了JAVA技術來制作 1997年2月18日,,JDK1.1發(fā)布 1997年4月2日,,JavaOne會議召開,參與者逾一萬人,,創(chuàng)當時全球同類會議規(guī)模之紀錄 1997年9月,,JavaDeveloperConnection社區(qū)成員超過十萬 1998年2月,JDK1.1被下載超過2,000,000次 1998年12月8日,,JAVA2企業(yè)平臺J2EE發(fā)布 1999年6月,,SUN公司發(fā)布Java的三個版本:標準版(J2SE)、企業(yè)版(J2EE)和微型版(J2ME) 2000年5月8日,,JDK1.3發(fā)布 2000年5月29日,,JDK1.4發(fā)布 2001年6月5日,NOKIA宣布,,到2003年將出售1億部支持Java的手機 2001年9月24日,,J2EE1.3發(fā)布 2002年2月26日,J2SE1.4發(fā)布,,自此Java的計算能力有了大幅提升 2004年9月30日18:00PM,,J2SE1.5發(fā)布,成為Java語言發(fā)展史上的又一里程碑,。為了表示該版本的重要性,,J2SE1.5更名為Java SE 5.0 2005年6月,JavaOne大會召開,,SUN公司公開Java SE 6,。此時,Java的各種版本已經(jīng)更名,,以取消其中的數(shù)字“2”:J2EE更名為Java EE,,J2SE更名為Java SE,J2ME更名為Java ME 2006年12月,,SUN公司發(fā)布JRE6.0 2009年12月,,SUN公司發(fā)布Java EE 6 2010年11月,由于Oracle公司對于Java社區(qū)的不友善,因此Apache揚言將退出JCP[14] 2011年7月28日,,Oracle公司發(fā)布Java SE 7 2014年3月18日,,Oracle公司發(fā)表Java SE 8 2017年9月21日,Oracle公司發(fā)表Java SE 9
語言特性[編輯] Java之所以被開發(fā),,是要達到以下五個目的: Java技術主要分成幾個部分:Java語言,、Java運行環(huán)境,、類庫。一般情況下說Java時并不區(qū)分指的是哪個部分,。 Java在1.5版本時,,做了重大改變,Sun公司并1.5版本重命名為Java 5.0,。 面向對象[編輯] Java的特點之一就是面向對象,,是程序設計方法的一種?!懊嫦驅ο蟪绦蛟O計語言”的核心之一就是開發(fā)者在設計軟件的時候可以使用自定義的類型和關聯(lián)操作,。代碼和數(shù)據(jù)的實際集合體叫做“對象”。一個對象可以想象成綁定了很多“行為(代碼)”和“狀態(tài)(數(shù)據(jù))”的物體,。對于數(shù)據(jù)結構的改變需要和代碼進行通信然后操作,,反之亦然。面向對象設計讓大型軟件工程的計劃和設計變得更容易管理,,能增強工程的健康度,,減少失敗工程的數(shù)量。 跨平臺性[編輯] Java語言的第二個特性就是跨平臺性,,也就是說使用Java語言編寫的程序可以在編譯后不用經(jīng)過任何更改,,就能在任何硬件設備條件下運行。這個特性經(jīng)常被稱為“一次編譯,,到處運行”,。 執(zhí)行Java應用程序必須安裝爪哇運行環(huán)境(Java Runtime Environment,JRE),,JRE內(nèi)部有一個Java虛擬機(Java Virtual Machine,,JVM)以及一些標準的類庫(Class Library)。通過JVM才能在電腦系統(tǒng)執(zhí)行Java應用程序(Java Application),,這與.Net Framework的情況一樣,,所以電腦上沒有安裝JVM,那么這些程序將不能夠執(zhí)行,。 實現(xiàn)跨平臺性的方法是大多數(shù)編譯器在進行Java語言程序的編碼時候會生成一個用字節(jié)碼寫成的“半成品”,,這個“半成品”會在Java虛擬機(解釋層)的幫助下運行,,虛擬機會把它轉換成當前所處硬件平臺的原始代碼。之后,,Java虛擬機會打開標準庫,,進行數(shù)據(jù)(圖片、線程和網(wǎng)絡)的訪問工作,。主要注意的是,,盡管已經(jīng)存在一個進行代碼翻譯的解釋層,有些時候Java的字節(jié)碼代碼還是會被JIT編譯器進行二次編譯,。 有些編譯器,,比如GCJ,可以自動生成原始代碼而不需要解釋層,。但是這些編譯器所生成的代碼只能應用于特定平臺,。并且GCJ目前只支持部分的Java API。 甲骨文公司對于Java的許可是“全兼容的”,,這也導致了微軟和升陽關于微軟的程序不支持RMI和JNI接口,、并且增加特性為己所用的法律爭端,。升陽最終贏得了官司,,獲得了大約兩千萬美元的賠償,法院強制要求微軟執(zhí)行升陽公司關于Java的許可要求,。作為回應,,微軟不再在Windows系統(tǒng)中捆綁Java,最新的Windows版本,,Windows Vista和Internet Explorer 7.0版本也不再提供對于Java應用程序和控件的支持,。但是升陽公司和其他使用Java運行時系統(tǒng)的公司在Windows操作系統(tǒng)下對用戶提供無償?shù)牡谌讲寮统绦蛑С帧?/p> Java語言使用解釋層最初是為了輕巧性。所以這些程序的運行效率比C語言和C++要低很多,,用戶也對此頗有微詞,。很多最近的調查顯示Java的程序運行速度比幾年前要高出許多,有些同樣功能的程序的效率甚至超過了C++和C語言編寫的程序[來源請求],。 Java語言在最開始應用的時候是沒有解釋層的,,所有需要編譯的代碼都直接轉換成機器的原始代碼。這樣做的后果就是獲得了最佳的性能,,但是程序臃腫異常,。從JIT技術開始,Java的程序都經(jīng)過一次轉換之后才變成機器碼,。很多老牌的第三方虛擬機都使用一種叫做“動態(tài)編譯”的技術,,也就是說虛擬機實時監(jiān)測和分析程序的運行行為,同時選擇性地對程序所需要的部分進行編譯和優(yōu)化,。所有這些技術都改善了代碼的運行速度,,但是又不會讓程序的體積變得失常,。 程序的輕便性事實上是軟件編寫很難達到的一個目標,Java雖然成功地實現(xiàn)了“一次編譯,,到處運行”,,但是由于平臺和平臺之間的差異,所編寫的程序在轉換代碼的時候難免會出現(xiàn)微小的,、不可察覺的錯誤和意外,。有些程序員對此非常頭疼,他們嘲笑Java的程序不是“一次編譯,,到處運行”,,而是“一次編譯,到處調試”,。以Java AWT為例,,早期Java AWT內(nèi)提供的按鈕、文字區(qū)等均是以計算機系統(tǒng)所默認的樣式而顯示,。這令Java程序在有些沒有提供圖案的計算機系統(tǒng)產(chǎn)生錯誤(在Microsoft Windows設有窗口管理器,,在一些Linux distribution則沒有)。后來SUN公司針對Java AWT一些問題而推出Java Swing,。 平臺無關性讓Java在服務器端軟件領域非常成功,。很多服務器端軟件都使用Java或相關技術建立。 自動垃圾回收(Garbage Collection)[編輯] C++語言被用戶詬病的原因之一是大多數(shù)C++編譯器不支持垃圾收集機制,。通常使用C++編程的時候,,程序員于程序中初始化對象時,會在主機內(nèi)存堆棧上分配一塊內(nèi)存與地址,,當不需要此對象時,,進行析構或者刪除的時候再釋放分配的內(nèi)存地址。如果對象是在堆棧上分配的,,而程序員又忘記進行刪除,,那么就會造成內(nèi)存泄漏(Memory Leak)。長此以往,,程序運行的時候可能會生成很多不清除的垃圾,,浪費了不必要的內(nèi)存空間。而且如果同一內(nèi)存地址被刪除兩次的話,,程序會變得不穩(wěn)定,,甚至崩潰。因此有經(jīng)驗的C++程序員都會在刪除之后將指針重置為NULL,,然后在刪除之前先判斷指針是否為NULL,。 C++中也可以使用“智能指針”(Smart Pointer)或者使用C++托管擴展編譯器的方法來實現(xiàn)自動化內(nèi)存釋放,智能指針可以在標準類庫中找到,,而C++托管擴展被微軟的Visual C++ 7.0及以上版本所支持,。智能指針的優(yōu)點是不需引入緩慢的垃圾收集機制,,而且可以不考慮線程安全的問題,但是缺點是如果不善使用智能指針的話,,性能有可能不如垃圾收集機制,,而且不斷地分配和釋放內(nèi)存可能造成內(nèi)存碎片,需要手動對堆進行壓縮,。除此之外,,由于智能指針是一個基于模板的功能,所以沒有經(jīng)驗的程序員在需要使用多態(tài)特性進行自動清理時也可能束手無策,。 Java語言則不同,,上述的情況被自動垃圾收集功能自動處理。對象的創(chuàng)建和放置都是在內(nèi)存堆棧上面進行的,。當一個對象沒有任何引用的時候,,Java的自動垃圾收集機制就發(fā)揮作用,自動刪除這個對象所占用的空間,,釋放內(nèi)存以避免內(nèi)存泄漏,。 注意程序員不需要修改finalize 方法,自動垃圾收集也會發(fā)生作用,。但是內(nèi)存泄漏并不是就此避免了,,當程序員疏忽大意地忘記解除一個對象不應該有的引用時,內(nèi)存泄漏仍然不可避免,。 不同廠商,、不同版本的JVM中的內(nèi)存垃圾回收機制并不完全一樣,,通常越新版本的內(nèi)存回收機制越快,,IBM、BEA,、SUN等等開發(fā)JVM的公司都曾宣稱過自己制造出了世界上最快的JVM[來源請求],,JVM性能的世界紀錄也在不斷的被打破并提高。 IBM有一篇有關Java內(nèi)存回收機制比不激活垃圾收集機制的C++內(nèi)存處理快數(shù)倍的技術文章[15],,而著名的Java技術書籍《Java編程思想》(Thinking in Java)也有一段論述Java內(nèi)存及性能達到甚至超過C++的章節(jié)[16],。 基本語法[編輯] 編寫Java程序前應注意以下幾點: 大小寫敏感:Java是大小寫敏感的,這就意味著標識符Hello與hello是不同的,。 類名:對于所有的類來說,,類名的首字母應該大寫。如果類名由若干單詞組成,,那么每個單詞的首字母應該大寫,,例如MyFirstJavaClass。 方法名:所有的方法名都應該以小寫字母開頭,。如果方法名含有若干單詞,,則后面的每個單詞首字母大寫,,例如myFirstJavaMethod。 源文件名:源文件名必須和類名相同,。當保存文件的時候,,你應該使用類名作為文件名保存(切記Java是大小寫敏感的),文件名的后綴為.java,。(如果文件名和類名不相同則會導致編譯錯誤),。 主方法入口:所有的Java程序由public static void main(String[] args)方法開始執(zhí)行。 下一篇為大家介紹 Java語法應用,。
|