Java是由Sun Microsystems公司推出的Java面向對象程序設計語言(如下簡稱Java語言)和Java平臺的總稱。由James Gosling和同事們共同研發,並在1995年正式推出。Java最初被稱爲Oak,是1991年爲消費類電子產品的嵌入式芯片而設計的。1995年改名爲Java,並從新設計用於開發Internet應用程序。用Java實現的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態Web、Internet計算。今後,Java被普遍接受並推進了Web的迅速發展,經常使用的瀏覽器均支持Javaapplet。另外一方面,Java技術也不斷更新。Java自面世後就很是流行,發展迅速,對C++語言造成有力衝擊。在全球雲計算和移動互聯網的產業環境下,Java更具有了顯著優點和廣闊前景。2010年Oracle公司收購Sun Microsystems。php
Java由四方面組成:html
●Java編程語言,即語法前端
●Java文件格式,即各類文件夾、文件的後綴java
●Java虛擬機(JVM),即處理*.class文件的解釋器python
Java分爲三個體系Java SE(J2SE,Java2 Platform Standard Edition,標準版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企業版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。web
與傳統程序不一樣,Sun 公司在推出 Java 之際就將其做爲一種開放的技術。全球數以萬計的 Java 開發公司被要求所設計的 Java軟件必須相互兼容。「Java 語言靠羣體的力量而非公司的力量」是Sun公司的口號之一,並得到了廣大軟件開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式徹底不一樣。正則表達式
Sun 公司對 Java 編程語言的解釋是:Java 編程語言是個簡單、面向對象、分佈式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言。數據庫
Java 平臺是基於 Java 語言的平臺。這樣的平臺很是流行。所以微軟公司推出了與之競爭的.NET平臺以及模仿Java的C#語言。編程
Java是功能完善的通用程序設計語言,能夠用來開發可靠的、要求嚴格的應用程序。
抽象類:規定一個或多個抽象方法的類別自己必須定義爲abstract,抽象類只是用來派生子類,而不能用它來建立對象。
final類:又稱「最終類」,它只能用來建立對象,而不能被繼承,與抽象類恰好相反,並且抽象類與最終類不能同時修飾同一個類。
包:Java中的包是相關類和接口的集合,建立包須使用關鍵字package。
多態類:在java中,對象變量是多態的。而java中不支持多重繼承。
接口:Java中的接口是一系列方法的聲明,是一些方法特徵的集合,一個接口只有方法的特徵沒有方法的實現,所以這些方法能夠在不一樣的地方被不一樣的類實現,而這些實現能夠具備不一樣的行爲。
java中的每個類都是從Object類擴展而來的。
Object類方法:
equal用於測試一個對象是否同另外一個對象相等。
toString返回一個表明該對象的字符串,每個類都會從Object類繼承該方法,有些類重寫了該方法,以便返回當前狀態的正確表示。
通用編程:任何類類型的全部值均可以同object類型的變量來代替。
封裝:把數據和行爲結合起在一個包中,並對對象使用者隱藏數據的實現過程,一個對象中的數據叫他的實例字段(instance field)。
重載:當多個方法具備相同的名字而含有不一樣的參數時,便發生重載。編譯器必須挑選出調用哪一個方法進行編譯。
重寫:也可稱爲方法的「覆蓋」。在Java中,子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。值得注意的是,子類在從新定義父類已有的方法時,應保持與父類徹底相同的方法頭聲明。
數組列表:ArrayList動態數組列表,是一個類庫,定義在java.util包中,可自動調節數組的大小。
Class類:object類中的getclass方法返回class類型的一個實例,程序啓動時包含在main方法的類會被加載,虛擬機要加載他須要的全部類,每個加載的類都要加載它須要的類。
編寫Java程序時,應注意如下幾點:
大小寫敏感:Java是大小寫敏感的,這就意味着標識符Hello與hello是不一樣的。
類名:對於全部的類來講,類名的首字母應該大寫。若是類名由若干單詞組成,那麼每一個單詞的首字母應該大寫,例如 MyFirstJavaClass 。
方法名:全部的方法名都應該以小寫字母開頭。若是方法名含有若干單詞,則後面的每一個單詞首字母大寫。
源文件名:源文件名必須和類名相同。當保存文件的時候,你應該使用類名做爲文件名保存(切記Java是大小寫敏感的),文件名的後綴爲.java。(若是文件名和類名不相同則會致使編譯錯誤)。
主方法入口:全部的Java 程序由public static void main(String args[])方法開始執行。
下面列出了Java關鍵字。這些關鍵字不能用於常量、變量、和任何標識符的名稱。
註釋做用:標識程序是幹什麼的,以及它是如何構建的。註釋幫助程序員進行相互溝通以及理解程序。註釋不是程序設計語言,因此編譯器編譯程序時忽略它們。
Java是印度尼西亞爪哇島的英文名稱,因盛產咖啡而聞名。Java語言中的許多庫類名稱,多與咖啡有關:如JavaBeans(咖啡豆)、NetBeans(網絡豆)以及ObjectBeans(對象豆)等等。SUN和JAVA的標識也正是一杯正冒着熱氣的咖啡。
Java平臺和語言最開始只是SUN公司在1990年12月開始研究的一個內部項目。SUN公司的一個叫作帕特里克·諾頓的工程師被本身開發的C和C語言編譯器搞得焦頭爛額,由於其中的API極其難用。帕特里克決定改用NeXT,同時他也得到了研究公司的一個叫作「Stealth 計劃」的項目的機會。
「Stealth 計劃」後來更名爲「Green計劃」,JGosling(詹姆斯·高斯林)和麥克·舍林丹也加入了帕特里克的工做小組。他們和其餘幾個工程師一塊兒在加利福尼亞州門羅帕克市沙丘路的一個小工做室裏面研究開發新技術,瞄準下一代智能家電(如微波爐)的程序設計,SUN公司預料將來科技將在家用電器領域大顯身手。團隊最初考慮使用C 語言,可是不少成員包括SUN的首席科學家比爾·喬伊,發現C 和可用的API在某些方面存在很大問題。
工做小組使用的是內嵌類型平臺,能夠用的資源極其有限。不少成員發現C 太複雜以致不少開發者常常錯誤使用。他們發現C 缺乏垃圾回收系統,還有可移植的安全性、分佈程序設計、和多線程功能。最後,他們想要一種易於移植到各類設備上的平臺。
根據可用資金,比爾·喬伊決定開發一種集C語言和Mesa語 言搭成的新語言,在一份報告上,喬伊把它叫作「將來」,他提議SUN公司的工程師應該在C 的基礎上,開發一種面向對象的環境。最初,高斯林試圖修改和擴展C 的功能,他本身稱這種新語言爲C --,可是後來他放棄了。他將要創造出一種全新的語言,被他命名爲「Oak」(橡樹),以他的辦公室外的樹而命名。
就像不少開發新技術的祕密的工程同樣,工做小組沒日沒夜地工做到了1992年的夏天,他們可以演示新平臺的一部分了,包括Green操做系統,Oak的程序設計語言,類庫,和其硬件。最初的嘗試是面向一種類PDA設備,被命名爲Star7,這種設備有鮮豔的圖形界面和被稱爲「Duke」的智能代理來幫助用戶。1992年12月3日,這臺設備進行了展現。
同年11月,Green計劃被轉化成了「FirstPerson有限公司」,一個SUN公司的全資子公司,團隊也被從新安排到了帕洛阿爾託。 FirstPerson團隊對建造一種高度互動的設備感興趣,當時代華納發佈了一個關於電視機頂盒的徵求提議書時(Request for proposal),FirstPerson改變了他們的目標,做爲對徵求意見書的響應,提出了一個機頂盒平臺的提議。可是有線電視業界以爲 FirstPerson的平臺給予用戶過多地控制權,所以FirstPerson的投標敗給了SGI。與3DO公司的另一筆關於機頂盒的交易也沒有成功,因爲他們的平臺不能在電視工業產生任何效益,公司再並回SUN公司。
1994年六、7月間,在經歷了一場歷時三天的頭腦風暴的討論以後,約翰·蓋吉、詹姆斯·高斯林、比爾·喬伊、帕特里克·諾頓、韋恩·羅斯因和埃裏克·斯庫米,團隊決定再一次改變了努力的目標,此次他們決定將該技術應用於萬維網。他們認爲隨着Mosaic瀏覽器的到來,因特網正在向一樣的高度互動的遠景演變,而這一遠景正是他們在有線電視網中看到的。做爲原型,帕特里克·諾頓寫了一個小型萬維網瀏覽器,WebRunner,後來更名爲HotJava。同年,Oak更名爲Java。商標搜索顯示,Oak已被一家顯卡製造商註冊,所以團隊找到了一個新名字。這個名字是在不少成員常去的本地咖啡館中杜撰出來的。名字是否是首字母縮寫還不清楚,很大程度上來講不是。雖然有人聲稱是開發人員名字的組合:James Gosling(詹 姆斯·高斯林)Arthur Van Hoff(阿瑟·凡·霍夫)Andy Bechtolsheim(安迪·貝克托克姆),或「Just Another Vague Acronym」(只是另一個含糊的縮寫)。還有一種比較可信的說法是這個名字是出於對咖啡的喜好,因此以Java咖啡來命名。類文件的前四個字節若是 用十六進制閱讀的話,分別爲「CA FE BA BE」,就會拼出兩個單詞「CAFE BABE」(咖啡寶貝)。
1994年10 月,HotJava和Java平臺爲公司高層進行演示。1994年,Java 1.0a版本已經能夠提供下載,可是Java和HotJava瀏覽器的第一次公開發布倒是在1995年5月23日SunWorld大會上進行的。SUN公 司的科學指導約翰·蓋吉宣告Java技術。這個發佈是與網景公司的執行副總裁馬克·安德森的驚人發佈一塊兒進行的,宣佈網景將在其瀏覽器中包含對Java的支持。1996年1月,Sun公司成立了Java業務集團,專門開發Java技術。
(詳細的歷史介紹,能夠參考資料:)
1995年5月23日,Java語言誕生;
1996年1月,第一個JDK-JDK1.0誕生;
1996年4月,10個最主要的操做系統供應商申明將在其產品中嵌入JAVA技術;
1996年9月,約8.3萬個網頁應用了JAVA技術來製做;
1997年2月18日,JDK1.1發佈;
1997年4月2日,JavaOne會議召開,參與者逾一萬人,創當時全球同類會議規模之紀錄;
1997年9月,JavaDeveloperConnection社區成員超過十萬;
1998年2月,JDK1.1被下載超過2,000,000次;
1998年12月8日,JAVA2企業平臺J2EE發佈;
1999年6月,SUN公司發佈Java的三個版本:標準版、企業版和微型版;
2000年5月8日,JDK1.3發佈;
2000年5月29日,JDK1.4發佈;
2001年6月5日,NOKIA宣佈,到2003年將出售1億部支持Java的手機;
2001年9月24日,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;
2006年12月,SUN公司發佈JRE6.0;
2009年4月7日Google App Engine開始支持Java;
2009年04月20日,甲骨文74億美圓收購Sun。取得java的版權;
2010年11月,因爲甲骨文對於Java社區的不友善,所以Apache揚言將退出JCP;
2011年7月28日,甲骨文發佈java7.0的正式版;
2014年3月19日,甲骨文公司發佈java8.0的正式版。
甲骨文的Java總架構師馬克·雷納德在2011年JavaOne大會上爲你們透露了Java 8的新功能,同時也談到了一些關於Java 9的計劃。
Java8 將會包含不少新特性,有如 Lambdas, Jigsaw模塊化等等,而首個里程碑版於二零一四年四月末發佈,詳細的時間表以下:
M1: April 24, 2012
M2: June 14, 2012
M3: July 30, 2012
M4: September 11, 2012
M5: November 26, 2012
M6: January 30, 2013 (Recommended Feature Complete date)
GA: September 2013
Java編程語言的風格十分接近C語言、C++語言。 Java是一個純粹的面向對象的程序設計語言,它繼承了 C++語言面向對象技術的核心。Java捨棄了C語言中容易引發錯誤的指針(以引用取代)、運算符重載(operator overloading)、多重繼承(以接口取代)等特性,增長了垃圾回收器功能用於回收再也不被引用的對象所佔據的內存空間,使得程序員不用再爲內存管理 而擔心。在 Java 1.5 版本中,Java 又引入了泛型編程(Generic Programming)、類型安全的枚舉、不定長參數和自動裝/拆箱等語言特性。
Java不一樣於通常的編譯執行計算機語言和解釋執行計算機語言。它首先將源代碼編譯成二進制字節碼(bytecode),而後依賴各類不一樣平臺上的虛擬機來解釋執行字節碼。從而實現了「一次編譯、處處執行」的跨平臺特性。不過,每次的執行編譯後的字節碼須要消耗必定的時間,這同時也在必定程度上下降了 Java 程序的性能。
編輯Java源代碼可使用任何無格式的純文本編輯器,在Windows操做系統上可使用微軟記事本(Notepad)、EditPlus等程序,在Linux平臺上可以使用vi工具等。
在記事本中輸入以下代碼:
public class HelloWorld{
//Java程序的入口方法,程序將從這裏開始執行
public static void main(String[] args){
//向控制檯打印一條語句
System.out.println("Helloworld!");
}
}
編輯上面的Java文件時,注意程序中粗體字標識的單詞,Java程序嚴格區分大小寫。將上面文本保存爲 HelloWorld.java,該文件就是Java程序的源程序。
編寫好Java程序的源代碼後,接下來應該編譯該Java源文件來生成字節碼了。
Java語言是易學的。Java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用Java。另外一方面,Java丟棄了C++中不多使用的、很難理解的、使人迷惑的那些特性,如操做符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,而是引用。並提供了自動的廢料收集,使得程序員沒必要爲內存管理而擔心。
Java語言是強制面向對象的。Java語言提供類、接口和繼承等原語,爲了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,並支持類與接口之間的實現機制(關鍵字爲implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純的面向對象程序設計語言。
Java語言是分佈式的。Java語言支持Internet應用的開發,在基本的Java應用編程接口中有一個網絡應用編程接口(java net),它提供了用於網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分佈式應用的重要手段。
Java語言是健壯的。Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。
Java語言是安全的。Java一般被用在網絡環境中,爲此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具備的許多安全特性之外,Java對經過網絡下載的類具備一個安全防範機制(類ClassLoader),如分配不一樣的名字空間以防替代本地的同名類、字節代碼檢查,並提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。
Java語言是體系結構中立的。Java程序(後綴爲java的文件)在Java平臺上被編譯爲體系結構中立的字節碼格式(後綴爲class的文件),而後能夠在實現這個Java平臺的任何系統中運行。這種途徑適合於異構的網絡環境和軟件的分發。
Java語言是可移植的。這種可移植性來源於體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統自己也具備很強的可移植性,Java編譯器是用Java實現的,Java的運行環境是用ANSI C實現的。
Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯爲字節碼格式,而後能夠在實現這個Java平臺的任何系統中運行。在運行時,Java平臺中的Java解釋器對這些字節碼進行解釋執行,執行過程當中須要的類在聯接階段被載入到運行環境中。
Java是性能略高的。與那些解釋型的高級腳本語言相比,Java的性能仍是較優的。
Java語言是原生支持多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來建立。一般有兩種方法來建立線程:其一,使用型構爲Thread(Runnable)的構造子將一個實現了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類並重寫run方法,使用該子類建立的對象即爲線程。值得注意的是Thread類已經實現了Runnable接口,所以,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執行,並提供多線程之間的同步機制(關鍵字爲synchronized)。
Java語言是動態的。Java語言的設計目標之一是適應於動態變化的環境。Java程序須要的類可以動態地被載入到運行環境,也能夠經過網絡來載入所須要的類。這也有利於軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。
Java 語言的優良特性使得Java應用具備無比的健壯性和可靠性,這也減小了應用系統的維護費用。Java對對象技術的全面支持和Java平臺內嵌的API能縮 短應用系統的開發時間並下降成本。Java的編譯一次,處處可運行的特性使得它可以提供一個隨處可用的開放結構和在多平臺之間傳遞信息的低成本方式。特別 是Java企業應用編程接口(Java Enterprise APIs)爲企業計算及電子商務應用系統提供了有關技術和豐富的類庫。
熟悉C語言和C++語言的讀者必定想搞清楚這個問題,實際上,Java確實是從C語言和C++語言繼承了許多成份,甚至能夠將Java當作是類C語言發展和衍生的產物。好比Java語言的變量聲明,操做符形式,參數傳遞,流程控制等方面和C語言、C++語言徹底相同。儘管如此,Java和C語言,C++語言又有許多差異,主要表以下幾個方面:
Java 中對內存的分配是動態的,它採用面向對象的機制,採用運算符new爲每一個對象分配內存空間,並且,實際內存還會隨程序運行狀況而改變。程序運行中 Java系統自動對內存進行掃描,對長期不用的空間做爲」垃圾」進行收集,使得系統資源獲得更充分地利用.按照這種機制,程序員沒必要關注內存管理問題,這 使Java程序的編寫變得簡單明瞭,而且避免了因爲內存管理方面的差錯而致使系統出問題。而C語言經過malloc()和free()這兩個庫函數來分別 實現分配內存和釋放內存空間的,C++語言中則經過運算符new和delete來分配和釋放內存。在C和C++這種機制中,程序員必須很是仔細地處理內存 的使用問題。一方面,若是對己釋放的內存再做釋放或者對不曾分配的內存做釋放,都會形成死機;而另外一方面,若是對長期不用的或再也不使用的內存不釋放,則會 浪費系統資源,甚至所以形成資源枯竭。
Java不在全部類以外定義全局變量,而是在某個類中定義一種公用靜態的變量來完成全局變量的功能。
Java不用goto語句,而是用try-catch-finally異常處理語句來代替goto語句處理出錯的功能。
Java不支持頭文件,而C語言和C++語言中都用頭文件來聲明類的原型、全局變量、庫函數等,這種採用頭文件的結構使得系統的運行維護至關繁雜。
Java不支持宏定義。Java只能使用關鍵字final來定義常量。
Java 對每種數據類型都分配固定長度。好比,在Java中,int類型老是32位的,而在C語言和C++語言中,對於不一樣的平臺,同一個數據類型分配不一樣的字節 數,一樣是int類型,在PC機中爲二字節即16位,而在VAX-11中,則爲32位。這使得C語言形成不可移植性,而Java則具備跨平臺性(平臺無關 性)。
類型轉換不一樣。在C語言和C++語言中,可經過指針進行任意的類型轉換,經常帶來不安全性,而在Java中,運行時系統對對象的處理要進行類型相容性檢查,以防止不安全的轉換。
結構和聯合的處理。Java中根本就不容許相似C語言的結構體(struct)和聯合體(union)包含結構和聯合,全部的內容都封裝在類裏面。
Java 再也不使用指針。指針是C語言和C++語言中最靈活,也最容易產生錯誤的數據類型。由指針所進行的內存地址操做常會形成不可預知的錯誤,同時經過指針對某個 內存地址進行顯式類型轉換後,能夠訪問一個C++中的私有成員,從而破壞安全性。而Java用「引用」的方式,對指針進行徹底地控制,程序員不能直接進行 任何指針操做。
避免平臺依賴。Java語言編寫的類庫能夠在其它平臺的Java應用程序中使用,而不像C++語言必須運行於單一平臺。
在B/S開發方面,Java要遠遠優於C++。
優點:Java適合團隊開發,軟件工程能夠相對作到規範。因爲Java語言自己的極其嚴格語法的特色,Java語言沒法寫出結構混亂的程序。這將強迫程序員的代碼軟件結構的規範性。這是一個很難比擬的優點。
劣勢:j2ee的架構很完美,初版軟件能夠作滿意,可是很不適合互聯網模式的持續不斷修改。互聯網軟件工程管理上的不足,持續的修修補補致使架構的破壞。
JDBC(Java Database Connectivity)提供鏈接各類關係數據庫的 統一接口,做爲數據源,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC爲工具/數據庫開發人員提供了一個標準的 API,據此能夠構建更高級的工具和接口,使數據庫開發人員可以用純Java API 編寫數據庫應用程序,同時,JDBC也是個商標名。
EJB(Enterprise JavaBeans)使得開發者方便地建立、部署和管理跨平臺的基於組件的企業應用。
Java RMI(Java Remote Method Invocation)用來開發分佈式Java應用程序。一個Java對象的方法能被遠程Java虛擬機調用。這樣,遠程方法激活能夠發生在對等的兩端,也能夠發生在客戶端和服務器之間,只要雙方的應用程序都是用Java寫的。
Java IDL(Java Interface Definition Language) 提供與CORBA(Common Object Request Broker Architecture)的無縫的互操做性。這使得Java能集成異構的商務信息資源。
JNDI(Java Naming and Directory Interface)提供從Java平臺到的統一的無縫的鏈接。這個接口屏蔽了企業網絡所使用的各類命名和目錄服務。
JMS(Java Message Service)提供企業消息服務,如可靠的消息隊列、發佈和訂閱通訊、以及有關推拉(Push/Pull)技術的各個方面。
JTS(Java transaction Service)提供存取事務處理資源的開放標準,這些事務處理資源包括事務處理應用程序、事務處理管理及監控。
JMF(Java Media Framework API),她能夠幫助開發者把音頻、視頻和其餘一些基於時間的媒體放到Java應用程序或applet小程序中去,爲多媒體開發者提供了捕捉、回放、編解碼等工具,是一個彈性的、跨平臺的多媒體解決方案。
Annotation(Java Annotation),在已經發布的JDK1.5(tiger)中增長新的特點叫Annotation。Annotation提供一種機制,將程序的元素如:類,方法,屬性,參數,本地變量,包和元數據聯繫起來。這樣編譯器能夠將元數據存儲在Class文件中。這樣虛擬機和其它對象能夠根據這些元數據來決定如何使用這些程序元素或改變它們的行爲。
在Java技術中,值得關注的還有JavaBeans, 它是一個開放的標準的組件體系結構,它獨立於平臺,但使用Java語言。一個JavaBean是一個知足JavaBeans規範的Java類,一般定義了 一個現實世界的事物或概念。一個JavaBean的主要特徵包括屬性、方法和事件。一般,在一個支持JavaBeans規範的開發環境(如Sun Java Studio 和IBM VisualAge for Java)中,能夠可視地操做JavaBean,也可使用JavaBean構造出新的JavaBean。JavaBean的優點還在於Java帶來的可 移植性。EJB (Enterprise JavaBeans) 將JavaBean概念擴展到Java服務端組件體系結構,這個模型支持多層的分佈式對象應用。除了JavaBeans,典型的組件體系結構還有DCOM和CORBA,關於這些組件體系結構的深刻討論超出了本書的範圍。
javaFX Sun剛剛發佈了JavaFX技術的正式版,它使您能利用JavaFX 編程語言開發富互聯網應用程序(RIA)。JavaFX Script編程語言(如下稱爲JavaFX)是Sun微系統公司開發的一種declarative,staticallytyped(聲明性的、靜態類 型)腳本語言。JavaFX技術有着良好的前景,包括能夠直接調用Java API的能力。由於JavaFXScript是靜態類型,它一樣具備結構化代碼、重用性和封裝性,如包、類、繼承和單獨編譯和發佈單元,這些特性使得使用 Java技術建立和管理大型程序變爲可能。
JavaFX從它2007年發佈以來,表現一直差強人意。Oracle收購了Sun以後,在 JavaFX中投入了大量的精力進行推廣和更新。JavaFX比較出名的應用應該是在2010年溫哥華冬奧會上,調整了JavaFX中的不少概念,以及重 新設計和實現了不少重要組件以後,獲得的就是如今的JavaFX 2.0。JavaFX 2.0的beta版已經發布,正式版則定於2010年第3季度發佈。JavaFX 2.0的新特性使得開發人員應該須要從新審視它在RIA開發領域中的位置。在不少狀況下,JavaFX 2.0也會是不錯的選擇。
JMX(Java Management Extensions,即Java管理擴展)是一個爲應用程序、設備、系統等植入
管理功能的框架。JMX能夠跨越一系列異構操做系統平臺、系統體系結構和網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。
JPA(Java Persistence API),JPA經過JDK 5.0註解或XML(標準通用標記語言的子集)描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。
JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一塊兒創建的一種動態網頁技術標準。JSP技術有點相似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而造成JSP文件(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其餘操做系統上運行。
Spring Framework【Java開源J2EE框架】
Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。Spring提供了管理業務對象的一致方法而且鼓勵了注入對接口編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的Inversion of Control容 器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器做爲構建完關注全部架構層的完整解決方案方面是獨一無二的。Spring提供了惟一 的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率而且減小了可能的錯誤。Spring的數據訪問架構還集成了Hibernate和其餘O/R mapping解決方案。Spring還提供了惟一的事務管理抽象,它可以在各類底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。Spring提供了一個用標準Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其餘企業事務--若是你須要--還能實現你本身的 aspects。這個框架足夠強大,使得應用程序可以拋開EJB的複雜性,同時享受着和傳統EJB相關的關鍵服務。Spring還提供了能夠和IoC容器集成的強大而靈活的MVCWeb框架。【SpringIDE:Eclipse平臺下一個輔助開發插件】。
WebWork 【Java開源Web框架】
WebWork是由OpenSymphony組織開發的,致力於組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,WebWork2.x前身是Rickard Oberg開發的WebWork,但WebWork已經被拆分紅了Xwork1和WebWork2兩個項目。Xwork簡潔、靈活功能強大,它是一個標準 的Command模式實現,而且徹底從web層脫離出來。Xwork提供了不少核心功能:前端攔截機(interceptor),運行時表 單屬性驗證,類型轉換,強大的表達式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。WebWork2創建在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的 變成Action(業務層Action類),session(會話)application(應用程序)範圍的映射,request請求參數映射。 WebWork2支持多視圖表示,視圖部分可使用JSP,Velocity,FreeMarker,JasperReports,XML等。在 WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上。【EclipseWork:用於WebWork輔 助開發的一個Eclipse插件】
Struts【Java開源Web框架】
Struts是一個基於SunJ2EE平臺的MVC框架,主要是採用Servlet和JSP技術來實現的。因爲Struts能充分知足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標籤和 信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再本身編碼實現全套MVC模式,極大的節省了時間,因此說Struts是一個 很是不錯的應用框架。【StrutsIDE:用於Struts輔助開發的一個Eclipse插件】
Hibernate 【Java開源持久層框架】
Hibernate是 一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。 Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序實用,也能夠在Servlet/JSP的Web應用中使用,最具革命 意義的是,Hibernate能夠在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Eclipse平臺下的Hibernate輔助開發工具:【Hibernate Synchronizer】【MiddlegenIDE】
JDiy 【Java極速開發框架. 開源】
JDiy是一款java極速開發框架,無需ORM,極少的代碼即可以完成數據庫的CRUD(增刪改查);
可同時用於javaEE或者javaSE開發環境;完美支持各大主流數據庫,如:MySQL, SQL Server, Oracle, DB2, PostgreSQL, SQLite;
同時JDiy內置一套精簡而不失強大的智能開發平臺(開發者登陸後,爲所欲爲地零代碼生成網站管理系統)
JFinal【Java極速WEB+ORM框架】
jfinal是基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。在擁有Java語言全部優點的同時再擁有ruby、python、php等動態語言的開發效率!主要特色1.MVC架構,設計精巧,使用簡單 2.遵循COC原 則,零配置,無xml 3.首創Db + Record模式,靈活便利 4.ActiveRecord支持,使數據庫開發極致快速 5.自動加載修改後的java文件,開發過程當中無需重啓web server 6.AOP支持,攔截器配置靈活,功能強大 7.Plugin體系結構,擴展性強 8.多視圖支持,支持FreeMarker、JSP、Velocity9.強大的Validator後端校驗功能 10.功能齊全,擁有struts2的絕大部分功能 11.體積小僅218K,且無第三方依賴
Quartz 【Java開源Job調度】
Quartz是 OpenSymphony開源組織在Job scheduling領域又一個開源項目,它能夠與J2EE與J2SE應用程序相結合也能夠單獨使用。Quartz能夠用來建立簡單或爲運行十個,百個, 甚至是好幾萬個Jobs這樣複雜的日程序表。Jobs能夠作成標準的Java組件或EJBs。Quartz的最新版本爲Quartz 1.5.0。
Velocity 【Java開源模板引擎】
Velocity是一個基於java的模板引 擎(template engine)。它容許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velocity應用於web開發時,界面設計人員能夠和java程序開發人員同步開發一個遵循 MVC架構的web站點,也就是說,頁面設計人員能夠只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity 將java代碼從web頁面中分離出來,這樣爲web站點的長期維護提供了便利,同時也爲咱們在JSP和PHP以外又提供了一種可選的方案。 Velocity的能力遠不止web站點開發這個領域,例如,它能夠從模板(template)產生SQL和PostScript、XML,它也能夠被當 做一個獨立工具來產生源代碼和報告,或者做爲其餘系統的集成組件使用。Velocity也能夠爲Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式容許一個web應用以一個真正的MVC模型進行開發。 【VeloEclipse :Velocity在Eclipse平臺下的一個輔助開發插件】
IBATIS 【Java開源持久層框架】
使用ibatis提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象,這一層與經過Hibernate 實現ORM 而言基本一致,而對於具體的數據操做,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發者編寫具體的SQL語句。相對Hibernate等「全自動」ORM機制而言,ibatis 以SQL開發的工做量和數據庫移植性上的讓步,爲系統設計提供了更大的自由空間。做爲「全自動」ORM 實現的一種有益補充,ibatis 的出現顯得別具意義。
Compiere ERP&CRM 【Java開源ERP與CRM系統】
Compiere ERP&CRM爲全球範圍內的中小型企業提供綜合型解決方案,覆蓋從客戶管理、供應鏈到財務管理的所有領域,支持多組織、多幣種、多會計模式、多成本計算、多語種、多稅制等國際化特性。易於安裝、易於實施、易於使用。只須要短短几個小時,您就可使用申購-採購-發票-付款、報價-訂單-發票-收款、產品與訂價、資產管理、客戶關係、供應商關係、員工關係、經營業績分析等強大功能了。
Eclipse 【Java開源開發工具】
Eclipse平臺是IBM向開放源碼社區捐贈的開發框架,它之因此出名並非由於IBM宣稱投入開發的資金總數 —4千萬美圓,而是由於如此巨大的投入所帶來的成果:一個成熟的、精心設計的以及可擴展的體系結構。
NetBeans【Java開源開發工具】
NetBeans IDE 是一個爲軟件開發者提供的自由、開源的集成開發環境。您能夠從中得到您所須要的全部工具,用Java、C/C++ 甚至是Ruby 來建立專業的桌面應用程序、企業應用程序、web 和移動應用程序。此IDE 能夠在多種平臺上運行,包括Windows、Linux、Mac OS X以及Solaris;它易於安裝且很是方便使用。
XPlanner 【Java開源項目管理】
XPlanner 一個基於Web的XP團隊計劃和跟蹤工具。XP獨特的開發概念如iteration、user stories等,XPlanner都提供了相對應的的管理工具,XPlanner 支持XP開發流程,並解決利用XP思想來開發項目所碰到的問題。XPlanner特色包括:簡單的模型規劃,虛擬筆記卡(Virtual note cards),iterations、user stories與工做記錄的追蹤,未完成stories將自動迭代,工做時間追蹤,生成團隊效率,我的工時報表,SOAP界面支持。
HSQLDB 【Java開源DBMS數據庫】
HSQLDB(Hypersonic SQL)是純Java開發的關係型數據庫,並提供JDBC驅動存取數據。支持ANSI-92 標準SQL語法。並且他佔的空間很小。大約只有160K,擁有快速的數據庫引擎。
Liferay 【Java開源Portal門戶】
表明了完整的J2EE應用,使用了Web、EJB以及JMS等技術,特別是其前臺界面部分使用Struts 框架技術,基於XML的portlet配置文件能夠自由地動態擴展,使用了Web Services來支持一些遠程信息的獲取,使用Apache Lucene實現全文檢索功能。
JetSpeed 【Java開源Portal門戶】
Jetspeed是一個開放源代碼的企業信息門戶(EIP)的實現,使用的技術是Java和XML。用戶可使用瀏覽器,支持WAP協議的手機或者其它的設備訪問Jetspeed架設的信息門戶獲取信息。Jetspeed扮演着信息集中器的角色,它可以把信息集中起來而且很容易地提供給用戶。
JOnAS 【Java開源J2EE服務器】
JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成爲它的Web容器,以確保符合Servlet 2.3和JSP 1.2規範。JOnAS服務器依賴或實現如下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail。
JFox3.0 【Java開源J2EE服務器】
JFox是Open Source Java EE Application Server,致力於提供輕量級的Java EE應用服務器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應用的開發! 若是您正在尋找一個簡單、輕量、高效、完善的Java EE開發平臺,那麼JFox正是您須要的。
當今最流行的是Eclipse、Myeclipse、IntelliJ、Jbuilder、Jdeveloper、Netbeans、JCreator等。
JDK是由一套獨立程序構成的集合,每一個程序都是從命令行調用的,用於開發和測試Java程序。除了JDK,還可使用別的Java開發工具。
軟件架構做爲一個概念,體如今技術和業務兩個方面。
從技術角度來講:軟件架構隨着技術的革新不斷地更新其內容,軟件架構創建於當前技術和一些基本原則的基礎之上。
基本原則:分層原則、模塊化原則、接口實現分離原則、細節隱藏原則、依賴倒置原則
平臺
Java 平臺由Java虛擬機(Java Virtual Machine)和Java應用編程接口(Application ProgrammingInterface、簡稱API)構成。Java應用編程接口爲此提供了一個獨立於操做系統的標準接口,可分爲基本部分和擴展部 分。在硬件或操做系統平臺上安裝一個Java平臺以後,Java應用程序就可運行。Java平臺已經嵌入了幾乎全部的操做系統。這樣Java程序能夠只編譯一次,就能夠在各類系統中運行。Java應用編程接口已經從1.1x版發展到1.2版。經常使用的Java平臺基於Java1.5,最近版本爲Java1.8。
Java 分爲三個體系JavaSE(Java2 Platform Standard Edition,java平臺標準版),JavaEE(Java 2 Platform,Enterprise Edition,java平臺企業版),JavaME(Java 2 Platform Micro Edition,java平臺微型版)。
Java SE
Java SE(Java Platform,Standard Edition)。Java SE 之前稱爲J2SE。它容許開發和部署在桌面、服務器、嵌入式環境和實時環境中使用的Java應用程序。Java SE 包含了支持Java Web 服務開發的類,併爲Java Platform,Enterprise Edition(Java EE)提供基礎。
Java EE
Java EE(Java Platform,Enterprise Edition)。這個版本之前稱爲J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的服務器端 Java 應用程序。Java EE 是在Java SE 的基礎上構建的,它提供Web 服務、組件模型、管理和通訊API,能夠用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和Web 2.0 應用程序。
Java ME
Java ME(Java Platform,Micro Edition)。這個版本之前稱爲J2ME,也叫K-JAVA。Java ME 爲在移動設備和嵌入式設備(好比手機、PDA、電視機頂盒和打印機)上運行的應用程序提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網絡協議以及對能夠動態下載的連網和離線應用程序的豐富支持。基於Java ME 規範的應用程序只需編寫一次,就能夠用於許多設備,並且能夠利用每一個設備的本機功能。
自從Sun被甲骨文收購之後,Java的發展前景就變得撲朔迷離起來,不少程序開發者都感到很迷惑。2010年4月9日,被稱爲Java之父的詹姆斯·高斯林又在我的博客上宣佈離開Oracle,這一事件更爲Java的前景增長了一層迷霧。可是在進入5月份以後,一切開始變得明朗起來。
在 Oracle的活動發佈網站上,連續發佈了多個關於Java的推廣活動。5月12日,Oracle主要產品負責人Dave Hofert將大談對JavaSE商業應用的改進和革新。根據宣傳資料,在此次演講中,DaveHofert將提到如下問題:商業版與社區版本之間平臺支 持的差別。如何得到專家幫助,以幫助企業加強其Java應用。對於舊版本的安全修補問題。可以使用的發佈工具和更新。6月1八、1九、20、27日,將分別 在赫爾辛基、斯圖加特、布達佩斯、倫敦舉行Oracle、Sun專家與用戶見面會,在見面會上 與用戶一塊兒探討Java的發展路線。主要討論的問題包括Oracle將如何繼續投資和改進Java技術,而且還會向用戶通報JavaSE、JavaME專 家團隊的最新消息、JavaFX和JDK7最新的消息,以及OracleBerkeley DB的相關信息。5月3日,已經離開Oracle近一個月的Java之父詹姆斯·高斯林在他的博客上表達了對NetBeans 6.9 和 FX1.3發佈的關心。這兩個項目最新版本的發佈,能夠證實Oracle已經開始兌現當初的承諾。詹姆斯·高斯林在其早期的博客中,也透露了不會放棄 Java事業,只是須要解決一些與Oracle之間的法律問題。這一切跡象代表,Oracle絕對不會輕易放棄Java這塊巨大的蛋糕,而且Oracle 也開始逐漸學會了對開源社區的尊重。首先在JDK的商業版本方面,Oracle將會繼續深刻挖掘Java的商業利益,與其固有產品進行更深 入的整合。在社區版本方面,Oracle將與Java開發者一塊兒探討和研發Java的技術。這裏須要特別提到的一個產品是Oracle BerkeleyDB,該產品是Oracle一直支持的一個開源非關係數據庫產品,在NoSQL大行其道的今天,若是Oracle可以將BerkeleyDB與Java進行深刻整合,將會爲Java帶來更多的活力和生命。從詹姆斯·高斯林的表現來看,他彷佛與Oracle之間已經達成某種諒解,而且有進一步合做的可能性。
1991 年,Sun公司的James Gosling,Bill Joe等人,爲電視、控制烤麪包機等家用電器的交互操做開發了一個Oak(橡樹)軟件,他是Java的前身。當時,Oak並無引發人們的注意,直到 1994年,隨着互聯網和3W的飛速發展,他們用Java編制了HotJava瀏覽器,獲得了Sun公司首席執行官Scott McNealy的支持,得以研發和發展。因爲Oak商標已經被Oak Technology註冊,1995年Oak短暫改名爲Green,最後改名爲Java。Java的得名還有段小插曲呢,一天,Java小組成員正在喝咖 啡時,議論給新語言起個什麼名字的問題,有人提議用Java(Java是印度尼西亞盛產咖啡的一個島嶼),這個提議獲得了其餘成員的贊同, 因而就採用Java來命名此新語言。很快Java被工業界承認,許多大公司如IBM Microsoft.DEC等購買了Java的使用權,並被美國雜誌PC Magazine評爲1995年十大優秀科技產品。今後,開始了Java應用的新篇章。
Java的誕生是對傳統計算機模式的挑戰,對計算機軟件開發和軟件產業都產生了深遠的影響:
軟件4A目標要求軟件能達到任何人在任何地方在任什麼時候間對任何電子設備都能應用。這樣能知足軟件平臺上互相操做,具備可伸縮性和重用性並可即插即用等分佈式計算模式的需求。
基於構建開發方法的崛起,引出了CORBA國際標準軟件體系結構和多層應用體系框架。在此基礎上造成了Java.2平臺和.NET平臺兩大派系,推進了整個IT業的發展。
對軟件產業和工業企業都產生了深遠的影響,軟件從以開發爲中心轉到了以服務爲中心。中間提供商,構件提供商,服務器軟件以及諮詢服務商出現。企業必須重塑自我,B2B的電子商務將帶動整個新經濟市場,使企業得到新的價值,新的增加,新的商機,新的管理。
對軟件開發帶來了新的革命,重視使用第三方構件集成,利用平臺的基礎設施服務,實現開發各個階段的重要技術,重視開發團隊的組織和文化理念,協做,創做,責任,誠信是人才的基本素質。
Java 手機遊戲模擬器主要針對諾基亞S60系列手機以及其餘大屏手機(小屏遊戲也可運行,但不能全屏顯示),是一款很是簡單並且實用的JAVA遊戲模擬器,能夠 正常運行絕大部分JAVA手機遊戲!注:暫不支持遊戲後綴名爲sis的遊戲。程序的使用是傻瓜式的,在電腦上安裝好之後,全部的遊戲jar文件都會和模擬 器相關連,直接雙擊遊戲jar文件就能夠進入模擬器玩遊戲啦!電腦的小數字鍵盤和方向鍵就能夠直接控制遊戲,與模擬器的按鍵相對應,固然也能夠用鼠標直接 點擊控制。
Java虛擬機(Java Virtual Machine) 簡稱JVM Java虛擬機是一個想象中的機器,在實際的計算機上經過軟件模擬來實現。Java虛擬機有本身想象中的硬件,如處理器、堆棧、寄存器等,還具備相應的指令系統。
引 入Java語言虛擬機後,Java語言在不一樣平臺上運行時不須要從新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平臺相關的信息,使得Java 語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就能夠在多種平臺上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具 體平臺上的機器指令執行。
在處理器層面上,內存模型定義了一個充要條件,「讓當前的處理器能夠看到其餘處理器寫 入到內存的數據」以及「其餘處理器能夠看到當前處理器寫入到內存的數據」。有些處理器有很強的內存模型,可以讓全部的處理器在任什麼時候候任何指定的內存地址 上均可以看到徹底相同的值。而另一些處理器則有較弱的內存模型,在這種處理器中,必須使用內存屏障(一種特殊的指令)來刷新本地處理器緩存並使本地處理器緩存無效,目的是爲了讓當前處理器可以看到其餘處理器的寫操做或者讓其餘處理器能看到當前處理器的寫操做。這些內存屏障一般在lock和unlock操做的時候完成。內存屏障在高級語言中對程序員是不可見的。
在宣佈修正Java嚴重0day漏 洞的消息發出一天後,甲骨文公佈了Java SE 7u11更新,它包含了安全漏洞CVE-2013-0422的補丁,同時也改變了默認的Java安全級別設置,任何未簽名的Java Applet或Java Web Start應用程序運行時老是會被提示,這樣能夠防止惡意應用被下載,對用戶來講這可能會帶來的影響是須要多確認一下。
Android是第一個內置支持Java的操做系統,Android應用程序使用Java語言編寫。Android開發水平的高低很大程度上取決於Java語言核心能力是否紮實。另一方面,3G應 用每每會和企業級應用相互結合。所以,在3G—Android課程體系中將Android課程與Java EE課程緊密結合,以Android課程爲主,以Java EE課程爲輔,配合真實的企業級項目,不但能夠深刻掌握基於Android平臺的智能手機開發技術,更重要的是還系統掌握了智能移動終端與Java EE服務器端相結合的諸多領域商業的應用。
Java試圖經過新的方式解決軟件編寫的複雜性。不少人認爲Java語言作到了它承諾的一切。可是Java並非一門完美的語言。
並非全部的工程和環境須要企業級別的複雜性,好比一個簡單的我的網站或者獨自編程的程序師所寫的程序。這些程序師會發現Java的複雜管理對於本身要作的程序來講過於強大了。一些人以爲Java在面向對象上面作的沒有Ruby和Smalltalk純粹。可是最新出現的用Java實現的語言Groovy解決了這些問題。
做爲一種已經建立的新技術,Java顯然綜合了不少語言的特性,好比C++、C語言、Python等等。一些對於Java的評論認爲Java的不變性在動搖。
有些程序師不喜歡原始類型(primitive type)和類(class)的分離,尤爲是那些曾經使用過Smalltalk和Ruby的程序師。Java的代碼相對於其餘的代碼來講過於冗長,這與它的輕便化聲明相違背。
Java 是一種單層繼承的語言。這也致使了程序師在試圖使用多重繼承時候的不便,而不少語言均可以使用這個特性。可是Java可使用接口類,把多重繼承可能致使 的風險減小到最小。Java不支持運算符重載,這是爲了防止運算符重載使得代碼的功能變得不清晰。可是用Java實現的語言Groovy能夠進行運算符重載。過去Java對於文本的操做和其餘語言,好比Perl和PHP相比差的較多,但Java在1.4版本時候引入了正則表達式。
使用Swing平臺編寫的帶有GUI(圖形用戶接口)的程序和其餘原始程序很是不一樣。選用AWT工 具包編寫程序的程序師看到的都是原始接口,並且也沒法得到先進的GUI編程支持,若是使用的話,就要提供每一個平臺上面所需的API,這將是一項龐大的工 程。Swing則是徹底用Java語言所寫的程序,避免了接口元素重複的問題,只使用全部平臺都支持的最基本的繪圖機制。可是不少用戶不知道如何在 Java風格和Windows風格之間進行轉換,結果形成了Java程序的接口在不少程序中很是特殊。蘋果電腦已經提供了優化過的Java運行時程序,包含了Mac OS X的經典Aqua接口風格。
因爲Java編譯器和虛擬機的不一樣對Java代碼的性能影響比語言自己的影響大的多,因此統一討論Java的程序的性能常常是有誤導性的。據IBM的數據,在一樣的硬件上2001年時的IBMJDK版本的性能是1996年的JDK版本的十倍左右。即便是在同一時期,不一樣公司的JDK和JRE的性能也不同,好比SUN、IBM、BEA等公司都有本身開發的JDK和JRE。
Java語言的一些特性不可避免的有額外的性能代價。例如數組範圍檢查、運行時類型檢查等等;Java程序的性能還會由於不一樣的動態複雜性和垃圾處理機制使用的多少而各有不一樣。若是JVM的實現比較優化的話,那麼這些功能甚至能夠增長存儲器分配的性能。這和老是使用STL或者託管C++的程序的狀況相似。
Java的設計目的主要是安全性和可攜性,因此對於一些特性。好比對硬件架構和存儲器地址訪問的直接訪問都被去除了,若是須要間接調用這些底層功能的話,就須要使用JNI(Java本地接口)來調用本地代碼。而間接訪問意味着頻繁調用這些特性時性能損失會很大,微軟的.NET平臺也有這樣的問題。