發(fā)展歷程
JAVA
20世紀90年代,硬件領域出現了單片式計算機系統(tǒng)蟋滴,這種價格低廉的系統(tǒng)一出現就立即引起了自動控制領域人員的注意,因為使用它可以大幅度提升消費類電子產品(如電視機頂盒痘绎、面包烤箱津函、移動電話等)的智能化程度。Sun公司為了搶占市場先機孤页,在1991年成立了一個稱為Green的項目小組尔苦,帕特里克、詹姆斯·高斯林、麥克·舍林丹和其他幾個工程師一起組成的工作小組在加利福尼亞州門洛帕克市沙丘路的一個小工作室里面研究開發(fā)新技術允坚,專攻計算機在家電產品上的嵌入式應用魂那。
由于C++所具有的優(yōu)勢,該項目組的研究人員首先考慮采用C++來編寫程序稠项。但對于硬件資源極其匱乏的單片式系統(tǒng)來說涯雅,C++程序過于復雜和龐大。另外由于消費電子產品所采用的嵌入式處理器芯片的種類繁雜展运,如何讓編寫的程序跨平臺運行也是個難題活逆。為了解決困難,他們首先著眼于語言的開發(fā)乐疆,假設了一種結構簡單划乖、符合嵌入式應用需要的硬件平臺體系結構并為其制定了相應的規(guī)范,其中就定義了這種硬件平臺的二進制機器碼指令系統(tǒng)(即后來成為“字節(jié)碼”的指令系統(tǒng))挤土,以待語言開發(fā)成功后琴庵,能有半導體芯片生產商開發(fā)和生產這種硬件平臺。對于新語言的設計仰美,Sun公司研發(fā)人員并沒有開發(fā)一種全新的語言迷殿,而是根據嵌入式軟件的要求,對C++進行了改造咖杂,去除了留在C++的一些不太實用及影響安全的成分庆寺,并結合嵌入式系統(tǒng)的實時性要求,開發(fā)了一種稱為Oak的面向對象語言诉字。
由于在開發(fā)Oak語言時懦尝,尚且不存在運行字節(jié)碼的硬件平臺,所以為了在開發(fā)時可以對這種語言進行實驗研究壤圃,他們就在已有的硬件和軟件平臺基礎上陵霉,按照自己所指定的規(guī)范,用軟件建設了一個運行平臺伍绳,整個系統(tǒng)除了比C++更加簡單之外踊挠,沒有什么大的區(qū)別。1992年的夏天冲杀,當Oak語言開發(fā)成功后效床,研究者們向硬件生產商進行演示了Green操作系統(tǒng)、Oak的程序設計語言权谁、類庫和其硬件剩檀,以說服他們使用Oak語言生產硬件芯片,但是旺芽,硬件生產商并未對此產生極大的熱情谨朝。因為他們認為卤妒,在所有人對Oak語言還一無所知的情況下,就生產硬件產品的風險實在太大了字币,所以Oak語言也就因為缺乏硬件的支持而無法進入市場则披,從而被擱置了下來。
1994年6洗出、7月間士复,在經歷了一場歷時三天的討論之后,團隊決定再一次改變了努力的目標翩活,這次他們決定將該技術應用于萬維網阱洪。他們認為隨著Mosaic瀏覽器的到來,因特網正在向同樣的高度互動的遠景演變菠镇,而這一遠景正是他們在有線電視網中看到的冗荸。作為原型,帕特里克·諾頓寫了一個小型萬維網瀏覽器WebRunner利耍。
1995年蚌本,互聯網的蓬勃發(fā)展給了Oak機會。業(yè)界為了使死板隘梨、單調的靜態(tài)網頁能夠“靈活”起來程癌,急需一種軟件技術來開發(fā)一種程序,這種程序可以通過網絡傳播并且能夠跨平臺運行轴猎。于是嵌莉,世界各大IT企業(yè)為此紛紛投入了大量的人力、物力和財力捻脖。這個時候锐峭,Sun公司想起了那個被擱置起來很久的Oak,并且重新審視了那個用軟件編寫的試驗平臺可婶,由于它是按照嵌入式系統(tǒng)硬件平臺體系結構進行編寫的沿癞,所以非常小,特別適用于網絡上的傳輸系統(tǒng)扰肌,而Oak也是一種精簡的語言抛寝,程序非常小熊杨,適合在網絡上傳輸曙旭。Sun公司首先推出了可以嵌入網頁并且可以隨同網頁在網絡上傳輸的Applet(Applet是一種將小程序嵌入到網頁中進行執(zhí)行的技術),并將Oak更名為Java(在申請注冊商標時晶府,發(fā)現Oak已經被人使用了桂躏,再想了一系列名字之后,最終川陆,使用了提議者在喝一杯Java咖啡時無意提到的Java詞語)剂习。5月23日,Sun公司在Sun world會議上正式發(fā)布Java和HotJava瀏覽器。IBM鳞绕、Apple失仁、DEC、Adobe们何、HP萄焦、Oracle、Netscape和微軟等各大公司都紛紛停止了自己的相關開發(fā)項目冤竹,競相購買了Java使用許可證拂封,并為自己的產品開發(fā)了相應的Java平臺。
1996年1月鹦蠕,Sun公司發(fā)布了Java的第一個開發(fā)工具包(JDK 1.0)冒签,這是Java發(fā)展歷程中的重要里程碑,標志著Java成為一種獨立的開發(fā)工具钟病。9月萧恕,約8.3萬個網頁應用了Java技術來制作。10月档悠,Sun公司發(fā)布了Java平臺的第一個即時(JIT)編譯器廊鸥。
1997年2月,JDK 1.1面世辖所,在隨后的3周時間里惰说,達到了22萬次的下載量。4月2日缘回,Java One會議召開吆视,參會者逾一萬人,創(chuàng)當時全球同類會議規(guī)模之紀錄酥宴。9月啦吧,Java DeveloperConnection社區(qū)成員超過10萬。
1998年12月8日拙寡,第二代Java平臺的企業(yè)版J2EE發(fā)布授滓。1999年6月,Sun公司發(fā)布了第二代Java平臺(簡稱為Java2)的3個版本:J2ME(Java2 Micro Edition肆糕,Java2平臺的微型版)般堆,應用于移動、無線及有限資源的環(huán)境诚啃;J2SE(Java 2 Standard Edition淮摔,Java 2平臺的標準版),應用于桌面環(huán)境始赎;J2EE(Java 2Enterprise Edition和橙,Java 2平臺的企業(yè)版)仔燕,應用于基于Java的應用服務器。Java 2平臺的發(fā)布魔招,是Java發(fā)展過程中最重要的一個里程碑晰搀,標志著Java的應用開始普及。
1999年4月27日办斑,HotSpot虛擬機發(fā)布厕隧。HotSpot虛擬機發(fā)布時是作為JDK 1.2的附加程序提供的,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認虛擬機俄周。
2000年5月吁讨,JDK1.3、JDK1.4和J2SE1.3相繼發(fā)布峦朗,幾周后其獲得了Apple公司Mac OS X的工業(yè)標準的支持建丧。2001年9月24日,J2EE1.3發(fā)布波势。2002年2月26日翎朱,J2SE1.4發(fā)布。自此Java的計算能力有了大幅提升尺铣,與J2SE1.3相比拴曲,其多了近62%的類和接口。在這些新特性當中凛忿,還提供了廣泛的XML支持澈灼、安全套接字(Socket)支持(通過SSL與TLS協(xié)議)、全新的I/OAPI店溢、正則表達式叁熔、日志與斷言。2004年9月30日床牧,J2SE1.5發(fā)布荣回,成為Java語言發(fā)展史上的又一里程碑。為了表示該版本的重要性戈咳,J2SE 1.5更名為Java SE 5.0(內部版本號1.5.0)心软,代號為“Tiger”,Tiger包含了從1996年發(fā)布1.0版本以來的最重大的更新著蛙,其中包括泛型支持删铃、基本類型的自動裝箱、改進的循環(huán)册踩、枚舉類型泳姐、格式化I/O及可變參數效拭。
2005年6月暂吉,在Java One大會上胖秒,Sun公司發(fā)布了Java SE 6。此時慕的,Java的各種版本已經更名阎肝,已取消其中的數字2,如J2EE更名為JavaEE肮街,J2SE更名為JavaSE风题,J2ME更名為JavaME。
2006年11月13日嫉父,Java技術的發(fā)明者Sun公司宣布沛硅,將Java技術作為免費軟件對外發(fā)布。Sun公司正式發(fā)布的有關Java平臺標準版的第一批源代碼绕辖,以及Java迷你版的可執(zhí)行源代碼摇肌。從2007年3月起,全世界所有的開發(fā)人員均可對Java源代碼進行修改仪际。
Java創(chuàng)始人之一:詹姆斯·高斯林
2009年围小,甲骨文公司宣布收購Sun[1]。2010年树碱,Java編程語言的共同創(chuàng)始人之一詹姆斯·高斯林從Oracle公司辭職肯适。2011年,甲骨文公司舉行了全球性的活動成榜,以慶祝Java7的推出框舔,隨后Java7正式發(fā)布。2014年赎婚,甲骨文公司發(fā)布了Java8正式版[2]雨饺。2018年9月25日,Java11(18.9 LTS)正式發(fā)布惑淳,支持期限至2026年9月额港。[3]
編程開發(fā)
編程環(huán)境
Java概念圖
JDK(Java Development Kit)稱為Java開發(fā)包或Java開發(fā)工具,是一個編寫Java的Applet小程序和應用程序的程序開發(fā)環(huán)境歧焦。JDK是整個Java的核心移斩,包括了Java運行環(huán)境(Java Runtime Envirnment),一些Java工具和Java的核心類庫(Java API)绢馍。不論什么Java應用服務器實質都是內置了某個版本的JDK向瓷。主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外舰涌,還有很多公司和組織都開發(fā)了自己的JDK猖任,例如,IBM公司開發(fā)的JDK瓷耙,BEA公司的Jrocket朱躺,還有GNU組織開發(fā)的JDK刁赖。
另外,可以把Java API類庫中的Java SE API子集和Java虛擬機這兩部分統(tǒng)稱為JRE(JAVA Runtime Environment)长搀,JRE是支持Java程序運行的標準環(huán)境宇弛。
JRE是個運行環(huán)境,JDK是個開發(fā)環(huán)境源请。因此寫Java程序的時候需要JDK枪芒,而運行Java程序的時候就需要JRE。而JDK里面已經包含了JRE谁尸,因此只要安裝了JDK舅踪,就可以編輯Java程序,也可以正常運行Java程序良蛮。但由于JDK包含了許多與運行無關的內容硫朦,占用的空間較大,因此運行普通的Java程序無須安裝JDK背镇,而只需要安裝JRE即可咬展。
編程工具
Eclipse:一個開放源代碼的、基于Java的可擴展開發(fā)平臺[4]瞒斩。
NetBeans:開放源碼的Java集成開發(fā)環(huán)境破婆,適用于各種客戶機和Web應用。
IntelliJ IDEA:在代碼自動提示胸囱、代碼分析等方面的具有很好的功能祷舀。[5]
MyEclipse:由Genuitec公司開發(fā)的一款商業(yè)化軟件,是應用比較廣泛的Java應用程序集成開發(fā)環(huán)境烹笔。
EditPlus:如果正確配置Java的編譯器“Javac”以及解釋器“Java”后裳扯,可直接使用EditPlus編譯執(zhí)行Java程序[6]。
語言特點
1.簡單性
Java看起來設計得很像C++谤职,但是為了使語言小和容易熟悉饰豺,設計者們把C++語言中許多可用的特征去掉了,這些特征是一般程序員很少使用的允蜈。例如冤吨,Java不支持go to語句,代之以提供break和continue語句以及異常處理饶套。Java還剔除了C++的操作符過載(overload)和多繼承特征漩蟆,并且不使用主文件,免去了預處理程序妓蛮。因為Java沒有結構怠李,數組和串都是對象,所以不需要指針。Java能夠自動處理對象的引用和間接引用捺癞,實現自動的無用單元收集夷蚊,使用戶不必為存儲管理問題煩惱,能更多的時間和精力花在研發(fā)上翘簇。
2.面向對象
Java是一個面向對象的語言。對程序員來說儿倒,這意味著要注意應中的數據和操縱數據的方法(method)版保,而不是嚴格地用過程來思考。在一個面向對象的系統(tǒng)中夫否,類(class)是數據和操作數據的方法的集合彻犁。數據和方法一起描述對象(object)的狀態(tài)和行為。每一對象是其狀態(tài)和行為的封裝凰慈。類是按一定體系和層次安排的汞幢,使得子類可以從超類繼承行為荒吏。在這個類層次體系中有一個根類翁脆,它是具有一般行為的類悴势。Java程序是用類來組織的捌斧。
Java還包括一個類的擴展集合癌刽,分別組成各種程序包(Package)固蚤,用戶可以在自己的程序中使用沉帮。例如饲漾,Java提供產生圖形用戶接口部件的類(java.awt包)姻氨,這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫钓辆,處理輸入輸出的類(java.io包)和支持網絡功能的類(java.net包)。
3.分布性
Java設計成支持在網絡上應用肴焊,它是分布式語言前联。Java既支持各種層次的網絡連接,又以Socket類支持可靠的流(stream)網絡連接娶眷,所以用戶可以產生分布式的客戶機和服務器似嗤。
網絡變成軟件應用的分布運載工具。Java程序只要編寫一次届宠,就可到處運行双谆。
4.編譯和解釋性
Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機器碼席揽。Java字節(jié)碼提供對體系結構中性的目標文件格式顽馋,代碼設計成可有效地傳送程序到多個平臺。Java程序可以在任何實現了Java解釋程序和運行系統(tǒng)(run-time system)的系統(tǒng)上運行幌羞。
在一個解釋性的環(huán)境中寸谜,程序開發(fā)的標準“鏈接”階段大大消失了。如果說Java還有一個鏈接階段属桦,它只是把新類裝進環(huán)境的過程熊痴,它是增量式的他爸、輕量級的過程。因此果善,Java支持快速原型和容易試驗诊笤,它將導致快速程序開發(fā)。這是一個與傳統(tǒng)的巾陕、耗時的“編譯讨跟、鏈接和測試”形成鮮明對比的精巧的開發(fā)過程。
5.穩(wěn)健性
Java
Java原來是用作編寫消費類家用電子產品軟件的語言鄙煤,所以它是被設計成寫高可靠和穩(wěn)健軟件的晾匠。Java消除了某些編程錯誤,使得用它寫可靠軟件相當容易梯刚。
Java是一個強類型語言凉馆,它允許擴展編譯時檢查潛在類型不匹配問題的功能。Java要求顯式的方法聲明亡资,它不支持C風格的隱式聲明澜共。這些嚴格的要求保證編譯程序能捕捉調用錯誤,這就導致更可靠的程序锥腻。
可靠性方面最重要的增強之一是Java的存儲模型咳胃。Java不支持指針,它消除重寫存儲和訛誤數據的可能性旷太。類似地展懈,Java自動的“無用單元收集”預防存儲漏泄和其它有關動態(tài)存儲分配和解除分配的有害錯誤。Java解釋程序也執(zhí)行許多運行時的檢查供璧,諸如驗證所有數組和串訪問是否在界限之內存崖。
異常處理是Java中使得程序更穩(wěn)健的另一個特征。異常是某種類似于錯誤的異常條件出現的信號睡毒。使用try/catch/finally語句来惧,程序員可以找到出錯的處理代碼,這就簡化了出錯處理和恢復的任務演顾。
6.安全性
Java的存儲分配模型是它防御惡意代碼的主要方法之一供搀。Java沒有指針,所以程序員不能得到隱蔽起來的內幕和偽造指針去指向存儲器钠至。更重要的是葛虐,Java編譯程序不處理存儲安排決策,所以程序員不能通過查看聲明去猜測類的實際存儲安排棉钧。編譯的Java代碼中的存儲引用在運行時由Java解釋程序決定實際存儲地址屿脐。
Java運行系統(tǒng)使用字節(jié)碼驗證過程來保證裝載到網絡上的代碼不違背任何Java語言限制。這個安全機制部分包括類如何從網上裝載。例如的诵,裝載的類是放在分開的名字空間而不是局部類万栅,預防惡意的小應用程序用它自己的版本來代替標準Java類。
7.可移植性
Java使得語言聲明不依賴于實現的方面西疤。例如烦粒,Java顯式說明每個基本數據類型的大小和它的運算行為(這些數據類型由Java語法描述)。
Java環(huán)境本身對新的硬件平臺和操作系統(tǒng)是可移植的代赁。Java編譯程序也用Java編寫扰她,而Java運行系統(tǒng)用ANSIC語言編寫。
8.高性能
Java是一種先編譯后解釋的語言管跺,所以它不如全編譯性語言快义黎。但是有些情況下性能是很要緊的禾进,為了支持這些情況豁跑,Java設計者制作了“及時”編譯程序,它能在運行時把Java字節(jié)碼翻譯成特定CPU(中央處理器)的機器代碼泻云,也就是實現全編譯了艇拍。
Java字節(jié)碼格式設計時考慮到這些“及時”編譯程序的需要,所以生成機器代碼的過程相當簡單宠纯,它能產生相當好的代碼卸夕。
9.多線索性
Java是多線索語言,它提供支持多線索的執(zhí)行(也稱為輕便過程)婆瓜,能處理不同任務快集,使具有線索的程序設計很容易。Java的lang包提供一個Thread類廉白,它支持開始線索个初、運行線索、停止線索和檢查線索狀態(tài)的方法猴蹂。
Java的線索支持也包括一組同步原語院溺。這些原語是基于監(jiān)督程序和條件變量風范,由C.A.R.Haore開發(fā)的廣泛使用的同步化方案磅轻。用關鍵詞synchronized珍逸,程序員可以說明某些方法在一個類中不能并發(fā)地運行。這些方法在監(jiān)督程序控制之下聋溜,確保變量維持在一個一致的狀態(tài)谆膳。
10.動態(tài)性
Java語言設計成適應于變化的環(huán)境,它是一個動態(tài)的語言撮躁。例如摹量,Java中的類是根據需要載入的,甚至有些是通過網絡獲取的。
工作原理
工作原理
由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序接口
當編輯并運行一個Java程序時缨称,需要同時涉及到這四種方面凝果。使用文字編輯軟件(例如記事本、寫字板睦尽、UltraEdit等)或集成開發(fā)環(huán)境(Eclipse器净、MyEclipse等)在Java源文件中定義不同的類,通過調用類(這些類實現了Java API)中的方法來訪問資源系統(tǒng)当凡,把源文件編譯生成一種二進制中間碼山害,存儲在class文件中,然后再通過運行與操作系統(tǒng)平臺環(huán)境相對應的Java虛擬機來運行class文件沿量,執(zhí)行編譯產生的字節(jié)碼浪慌,調用class文件中實現的方法來滿足程序的Java API調用。