詹姆斯·高斯林(James gosling)等人在太陽微系統公司(Sun Microsystems)工作,在1990年代早期開發了Java語言的原型,最初命名為Oak,針對家用電器等小型系統的編程語言,並將其應用於電視、電話、鬧鐘、烤面包機等家用電器的控制和通信。由於這些智能家電的市場需求並沒有預期的那麽高,孫公司放棄了這個計劃。隨著1990年代互聯網的發展,Sun公司看到了Oak在互聯網上的應用前景,於是對Oak進行了改造,並於1995年5月以Java的名義正式發布。隨著互聯網的快速發展,Java逐漸成為壹種重要的網絡編程語言。
Java編程語言的風格和C++非常接近。Java繼承了C++語言中面向對象技術的核心,拋棄了C++語言中容易導致錯誤的指針,代之以引用。同時去掉了原來的C++和原來的運算符重載,還去掉了多重繼承特性,換成了壹個接口,增加了垃圾收集器的功能。在Java SE 1.5中,引入了泛型編程、類型安全枚舉、變長參數和自動解包。Sun Microsystems對Java語言的解釋是:“Java編程語言是壹種簡單的、面向對象的、分布式的、解釋性的、健壯的、安全的和系統無關的、可移植的、高性能的、多線程的和動態的語言。”
Java不同於壹般的編譯語言或直譯語言。它首先將源代碼編譯成字節碼,然後依靠不同平臺上的虛擬機來解釋和執行字節碼,從而實現了“壹次編寫,隨處運行”的跨平臺特性。在早期的JVM中,這在壹定程度上降低了Java程序的運行效率。但是J2SE1.4.2發布後,Java的運行速度有了很大的提升。
與傳統類型不同的是,Sun公司在引入Java時就把它作為壹種開放的技術。全球數以萬計的Java開發公司被要求設計必須相互兼容的Java軟件。“Java語言靠的是團體的力量,而不是公司的力量”是孫的口號之壹,並得到了廣大軟件開發人員的認可。這與微軟倡導的精英導向、封閉模式完全不同。此外,微軟後來推出了壹款與之競爭的。NET平臺和壹個模仿Java的C#語言。後來孫公司被甲骨文公司收購,Java成為甲骨文公司的產品。
目前手機操作系統Android的大部分代碼都是用Java編程語言編寫的。
早期Java
詹姆斯·高斯林,Java的發明者
杜克,Java語言的吉祥物
起初,該語言只是太陽微系統公司在1990和65438+2月開始研究的內部項目。太陽計算機公司的工程師帕特裏克·諾頓(Patrick Norton)被太陽計算機公司開發的C++和C語言編譯器弄得不知所措,因為其中的API極難使用。帕特裏克決定轉投NeXT,同時獲得了研究該公司壹個名為“隱形項目”的項目的機會。
隱身項目後來被更名為綠色項目,詹姆斯·高斯林和邁克·謝裏丹加入了帕特裏克的工作小組。他們和其他幾名工程師壹起,正在加州門洛帕克市沙丘路的壹個小工作室裏研究和開發新技術,目標是下壹代智能家電(如微波爐)的編程。孫預計,未來技術將在家電領域發揮巨大作用。該團隊最初考慮使用C++語言,但包括Sun首席科學家Bill Joy在內的許多成員發現,C++和可用的API在某些方面存在很大問題。
工作組使用嵌入式系統,其可用資源極其有限。很多會員發現C++太復雜,很多開發者經常誤用。他們發現C++缺少垃圾收集系統,而且它還具有可移植的安全性、分布式編程和多線程功能。最後,他們想要壹個可以輕松移植到各種設備上的平臺。
根據可用資金,Joey決定開發壹種結合C和Mesa的新語言。在壹份報告中,喬伊稱之為“未來”。他建議Sun的工程師應該開發壹個基於C++的面向對象的環境。起初,Gosling試圖修改和擴展C++的功能。他把這種新語言稱為C++ ++ -,但後來他放棄了。他要創造壹種全新的語言,他將其命名為“Oak”(橡樹),以他辦公室外的橡樹命名。
像許多開發新技術的秘密項目壹樣,工作組夜以繼日地工作,直到1993的夏天,他們才能夠演示新平臺的壹部分,包括綠色操作系統、Oak編程語言、類庫及其硬件。最初的嘗試是面對壹個名為Star7的類似PDA的設備,它有壹個明亮的圖形界面和壹個名為Duke的智能代理來幫助用戶。1992 65438+2月3日,此設備展示。
同年6月165438+10月,綠色項目轉型為孫公司的全資子公司“第壹人有限公司”,團隊搬遷至帕洛阿爾托。FirstPerson的團隊對構建壹個高度互動的設備很感興趣。當時代華納公司(time warner Inc .)發布電視機頂盒的提案請求時,FirstPerson改變了他們的目標,並針對征求意見提出了機頂盒平臺的提案。但是有線電視行業覺得FirstPerson的平臺給了用戶太多的控制權,所以FirstPerson的競標輸給了SGI。另壹個和3DO公司的機頂盒交易不成功,因為他們的平臺在電視行業產生不了任何效益,公司又被合並回孫公司。
Java與互聯網
1994年6月,約翰·蓋奇、詹姆斯·高斯林、比爾·喬伊、帕特裏克·諾頓、韋恩·羅辛和埃裏克·斯庫米組成的團隊經過三天的頭腦風暴討論,決定再次改變目標,這壹次他們決定將這項技術應用到萬維網上。他們認為,隨著馬賽克瀏覽器的到來,互聯網正在向他們在有線電視網絡中看到的高度互動的前景演變。以此為原型,Patrick Norton寫了壹個小的網頁瀏覽器WebRunner,後來改名為HotJava[12]。
1994 10月,HotJava和Java平臺為公司高層做了壹次演示。1994,Java
1.0a版本已經可以下載,但是Java和HotJava瀏覽器的首次公開發布是在1995年3月23日的SunWorld大會上。盛陽公司的科學總監約翰·蓋奇宣布了Java技術。這壹宣布是與網景公司執行副總裁馬克·安德森令人驚訝的宣布壹起作出的,他宣布網景公司將在其瀏覽器中包括對Java的支持。1996 1 10月,盛陽公司成立Java事業群,專門開發Java技術。
Java和“Java”
商標搜索的結果是,Oak已經被壹家顯卡廠商註冊了。於是同年,Oak改名為Java。當二進制文件(.類文件)用Java源代碼編譯的,用十六進制編輯器打開,前32位會顯示為CA FE BA BE,也就是短語“CAFE BABE”。
Java的近況
壹套Java編輯器軟件
J2SE環境與疾病預防控制中心的關系
JVM的角色
JSP頁面的概念
經過幾年的流行,Java在瀏覽器中的地位已經逐漸被侵蝕。它在簡單互動動畫中的用途已經完全被Adobe的Flash擠掉了。2005年,Java傾向於只用於更復雜的應用,如雅虎遊戲。與此同時,Java遭到了微軟的反對,他們決定不將Java平臺附加到新版本的Internet Explorer和Windows上。
恰恰相反。在萬維網和手持設備的服務器端,Java變得更加流行。很多網站在後端使用JSP等Java技術。
在桌面系統上,獨立的Java程序還是比較少見的,因為Java平臺的運行成本高,很多人的電腦上沒有安裝Java。因為以前網絡帶寬小,下載Java曾經是壹件很費時間的事情。但隨著10年計算機計算能力和網絡帶寬的巨大進步,虛擬機和編譯器的質量得到了提高,許多應用得到了廣泛應用,包括:
開源軟件:
NetBeans和Eclipse等軟件開發工具
安卓操作系統
傑迪特
Azureus BitTorrent客戶端。
JNode操作系統
Apache Software Foundation的Ant、Derby、Hadoop、Jakarta、POI和Tomcat。
JBoss和GlassFish應用服務器
商業軟件:
EIOffice(永中辦事處)
《我的世界》
純Java 3D遊戲合金戰士鉻
IBM Websphere、ColdFusion和WebLogic
智能理念
還有很多用Java寫的軟件,可以在。妳可以在下面的網頁上看到很多用Java寫的程序:/products/有大量用Java Swing開發的桌面Java程序/products/JFC/TSC/Sights/目前Java提供了以下三個版本:
Java平臺企業版(Java ee: Java平臺企業版)
Java平臺,標準版(Java SE: Java平臺標準版)
Java平臺微型版(Java me: Java平臺微型版)
Java平臺,卡片版
Java開源項目
2006年,SUN在JavaOne中宣布了Java開源項目,並推出了OpenJDK項目。[13]Java虛擬機、Java編譯器和Java類庫在GNU通用公共許可證下公開。
版本歷史
主條目:Java版本歷史
1995年5月23日,Java語言誕生了。
1996 1月,第壹個JDK-JDK1.0誕生了。
1996年4月,10各大操作系統廠商宣稱將在產品中嵌入JAVA技術。
1996年9月,用JAVA技術制作了約83000個網頁。
1997 2月18,JDK1.1發布。
1997年4月2日,JavaOne大會召開,參會人數超過10000人,創下了當時世界同類會議的規模紀錄。
1997年9月,JavaDeveloperConnection社區的成員已經超過10萬人。
1998年2月,JDK1.1下載超過200萬次。
1998 65438+2月8日,JAVA2企業平臺J2EE發布。
1999年6月,SUN公司發布了Java的三個版本:標準版(J2SE)、企業版(J2EE)和迷妳版(J2ME)。
2000年5月8日,JDK1.3發布。
2000年5月29日,JDK1.4發布。
2001年6月5日,諾基亞宣布,到2003年將銷售1億部支持Java的手機。
2006年9月24日5438+0,J2EE1.3發布。
2002年2月26日,J2SE1.4發布。從此,Java的計算能力有了很大的提高。
2004年9月30日,18:00PM和J2SE1.5發布,成為Java語言發展史上的又壹個裏程碑。為了顯示這個版本的重要性,J2SE1.5被改名為Java SE 5.0。
2005年6月,JavaOne大會召開,SUN公司將Java SE 6公之於眾。此時,各種版本的Java都已經改名,取消了數字“2”:J2EE改名為Java EE,J2SE改名為Java SE,J2ME改名為Java ME。
5438年6月+2006年2月,SUN公司發布了JRE6.0。
5438年6月+2009年2月,SUN公司發布Java EE 6。
2010 11,Apache威脅要退出JCP,因為Oracle對Java社區不友好[14]。
2011 7月28日,甲骨文發布Java SE 7。
2065 438+04 03 18甲骨文公司發布Java SE 8。
語言特征
開發Java是為了實現以下五個目的:
應該使用面向對象的編程方法
應該允許相同的程序在不同的計算機平臺上執行。
它應該包括對計算機網絡的內置支持。
應該設計為安全地執行遠程代碼。
它應該易於使用,並借鑒了以前的面向對象語言(如C++)的優點。
Java技術主要分為幾個部分:Java語言、Java運行環境、類庫。壹般來說,妳說Java的時候,並沒有區分妳指的是哪壹部分。
Java在1.5版本中變化較大,Sun公司將1.5版本更名為Java 5.0。
面向對象的
Java的特點之壹是面向對象,這是壹種編程方法。“面向對象編程語言”的核心之壹就是開發者在設計軟件時可以使用自定義類型和關聯操作。代碼和數據的實際集合稱為“對象”。壹個對象可以想象成壹個綁定了很多“行為(代碼)”和“狀態(數據)”的對象。對數據結構的修改需要和代碼溝通後再操作,反之亦然。面向對象設計使得大型軟件項目的規劃和設計更容易管理,可以增強項目的健康性,減少失敗項目的數量。
跨平臺
Java語言的第二個特點是跨平臺,也就是說用Java語言編寫的程序,編譯後不需要做任何改動,就可以在任何硬件設備條件下運行。這個特性通常被稱為“編譯壹次,到處運行”。
要執行Java應用程序,必須安裝Java運行時環境(JRE)。JRE中有壹個Java虛擬機(JVM)和壹些標準類庫。Java應用程序只能通過JVM在計算機系統上執行,這與。Net框架。因此,如果計算機上沒有安裝JVM,這些程序將不會執行。
實現跨平臺的方式是,大多數編譯器在編寫Java語言程序時會生成壹個用字節碼編寫的“半成品”,這個“半成品”會借助Java虛擬機(解釋層)運行,虛擬機會將其轉換成當前硬件平臺的原始代碼。之後Java虛擬機打開標準庫,訪問數據(圖片、線程、網絡)。主要需要註意的是,雖然已經有了代碼翻譯的解釋層,但是有時候Java字節碼代碼會被JIT編譯器重新編譯。
有些編譯器,如GCJ,可以自動生成原始代碼,無需解釋層。但是這些編譯器生成的代碼只能應用於特定的平臺。而且GCJ目前只支持壹些Java API。
甲骨文對Java的許可是“完全兼容”,這也導致了微軟和升陽之間關於微軟的程序不支持RMI和JNI接口並添加特性供自己使用的法律糾紛。聖陽最終贏得了訴訟,獲得了約2000萬美元的賠償。法院強制微軟執行升陽對Java的許可要求。作為回應,微軟在Windows系統中不再捆綁Java,最新版本的Windows、Windows Vista和Internet Explorer 7.0不再提供對Java應用程序和控件的支持。而盛陽公司和其他使用Java運行時系統的公司,為用戶提供免費的第三方插件和Windows操作系統下的程序支持。
Java語言最初使用解釋層是為了可移植性。所以這些程序的運行效率遠低於C語言和C++,用戶對此也頗有微詞。最近很多調查顯示,Java程序的運行速度比幾年前快了很多,有些功能相同的程序效率甚至超過了用C++和C語言寫的程序【出處請求】。
Java語言剛應用的時候,沒有解釋層,所有需要編譯的代碼都是直接轉換成機器的原碼。這樣做的結果是獲得最佳性能,但程序臃腫,不正常。從JIT技術開始,Java程序就被轉化成了機器碼。很多老牌的第三方虛擬機都采用了壹種叫做“動態編譯”的技術,即虛擬機實時監控和分析程序的運行行為,有選擇地編譯和優化程序需要的部分。這些技術都提高了代碼的運行速度,但不會使程序的大小異常。
事實上,程序的可移植性是軟件編寫中很難達到的目標。雖然Java已經成功實現了“編譯壹次,到處運行”,但由於平臺的差異,在程序轉換成代碼時,難免會出現細微的、不易察覺的錯誤和意外。有些程序員對此非常頭疼。他們嘲笑Java程序不是“編譯壹次,到處運行”,而是“編譯壹次,到處調試”。在Java中
比如AWT,早期的Java
AWT中提供的按鈕和文本區域以計算機系統的默認樣式顯示。這使得Java程序在壹些不提供模式的計算機系統中產生錯誤(在微軟
Windows有壹個窗口管理器,但在某些Linux發行版中沒有)。後來SUN公司引入Java,解決了Java AWT的壹些問題。
搖擺.
平臺無關性使得Java在服務器端軟件領域非常成功。許多服務器端軟件都是使用Java或相關技術構建的。
自動垃圾收集(垃圾收集)
C++語言被用戶詬病的原因之壹是大部分C++編譯器不支持垃圾收集機制。通常在使用C++編程時,程序員會在程序中初始化壹個對象時在宿主內存棧上分配壹個內存和地址,然後在不需要該對象時釋放分配的內存地址。如果對象被分配在堆棧上,而程序員忘記刪除它,這將導致內存泄漏(內存
泄漏).長此以往,程序運行時可能會產生大量不被清除的垃圾,浪費不必要的內存空間。而如果同壹個內存地址被刪除兩次,程序就會變得不穩定,甚至崩潰。所以有經驗的C++程序員會在刪除後將指針重置為空,然後在刪除前判斷指針是否為空。
C++也可以使用“智能指針”或C++托管擴展編譯器來實現自動內存釋放。智能指針可以在標準類庫中找到,而C++。
妳怎麽能問這樣壹個關於薩比的問題!)
Microsoft的Visual支持托管擴展
C++
7.0及以上版本支持。智能指針的優點是不需要引入緩慢的垃圾收集機制,線程安全可以忽略。但缺點是如果智能指針使用不當,性能可能不如垃圾收集機制,內存的不斷分配和釋放可能會造成內存碎片,需要手動壓縮堆。除此之外,由於智能指針是壹個基於模板的函數,沒有經驗的程序員在需要使用多態特性進行自動清理時可能會束手無策。
Java語言則不同,上述情況由自動垃圾回收功能自動處理。對象被創建並放在內存堆棧中。當壹個對象沒有引用時,Java的自動垃圾回收機制就發揮作用了,自動刪除這個對象占用的空間,釋放內存,避免內存泄漏。
註意程序員不需要修改finalize方法,自動垃圾回收也可以。但是,內存泄漏是無法避免的。當程序員疏忽地忘記刪除壹個對象不應該有的引用時,內存泄漏仍然是不可避免的。
不同廠商不同版本的JVM中的內存垃圾回收機制並不完全相同。通常,內存垃圾收集機制的新版本會更快。IBM、BEA、SUN等開發JVM的公司都曾宣稱自己做出了世界上最快的JVM[源碼請求],JVM性能的世界紀錄也在不斷被打破和提高。
IBM有壹篇關於Java內存回收機制比沒有垃圾回收機制的C++內存處理快幾倍的技術文章[15],著名的Java技術書籍《用Java思考》也有壹章講述Java內存和性能達到甚至超過C++ [16]。
基礎語法
寫Java程序前註意以下幾點:
區分大小寫:Java是區分大小寫的,這意味著標識符hello和Hello是不同的。
類名:對於所有的類,類名的第壹個字母應該大寫。如果類名由幾個單詞組成,每個單詞的第壹個字母應該大寫,例如MyFirstJavaClass。
方法名:所有方法名都應該以小寫字母開頭。如果方法名包含幾個單詞,後面每個單詞的第壹個字母都要大寫,例如myFirstJavaMethod。
源文件名:源文件名必須與類名相同。保存文件時,應該使用類名作為文件名(記住Java是區分大小寫的),文件名的後綴是。java。(如果文件名和類名不同,會導致編譯錯誤)。
Main方法入口:所有Java程序都由公共靜態void main (string [] args)方法執行。
Java關鍵字
Java關鍵字列在關鍵字下面。這些關鍵字不能用於常量、變量和任何標識符的名稱。
關鍵字
形容
摘要
抽象方法,抽象類的修飾符
維護
斷言條件是否滿足。
繼續
循環體剩余部分不被執行。
系統默認值
switch語句中的默認分支
做壹會兒
循環語句中,循環體將至少執行壹次
兩倍
64位雙精度浮點數
其他
不滿足if條件時執行的分支。
列舉型別
枚舉類型
延伸
指示壹個類是另壹個類的子類。
最後的
表示定義常數。
最後
不管有沒有異常都執行代碼。
漂浮物
32位單精度浮點數
為
For循環語句
轉到
用於進程跳轉(不可用,表示不能隨意跳轉)
如果
條件語句
工具
指示壹個類實現壹個接口。
進口
導入類
實例of
測試壹個對象是否是壹個類的實例。
(同Internationalorganizations)國際組織
32位整數
連接
接口是壹種抽象類型,只有方法和常數的定義。
長的
64位整數
當地的
表示方法是用非java代碼實現的。
新的
分配新的類實例
包裹
壹系列相關的類形成壹個包。
私人的
表示只能從類內部訪問的私有字段或方法。
保護
字段指示保護類型
公眾的
指示* * *具有屬性或方法。
返回
方法返回值
短的
16位數
靜電
表示在類級別定義並由所有實例共享的。
strictfp
浮點數的比較使用嚴格的規則。
極好的
表示基類
轉換
選擇指令
同步的
表示壹次只能由壹個線程訪問的代碼塊。
這
調用當前實例或調用另壹個構造函數
扔
拋出異常
投
定義方法可能引發的異常。
短暫的
修飾不想序列化的字段。
嘗試
指示代碼塊需要異常處理。
空的
tag方法不返回任何值。
不穩定的
標簽字段可以由多個線程同時訪問,而無需同步。
在…期間
While循環
給…作註解
註釋功能:確定程序是什麽以及它是如何構建的。註釋幫助程序員相互交流,理解程序。註釋不是編程語言,所以編譯器在編譯程序時會忽略它們。
界面和類別
Java附帶了壹個創建接口的類別,可以如下使用:
可刪除的公共接口{
void delete();
}
這段代碼意味著任何實現)可刪除接口的類都必須實現delete()方法。每個類別都可以自定義該方法的實現。這個概念可以有很多用途。以下是壹個類別的示例: