Java語言

也可簡稱Java,Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于個人PC、數(shù)據(jù)中心、游戲控制臺、科學超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。在全球云計算和移動互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。

起源介紹

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實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器均支持Javaapplet。另一方面,Java技術也不斷更新。(2010年Oracle公司收購了SUN)

基本組成

Java由四方面組成:Java編程語言、Java類文件格式、Java虛擬機和Java應用程序接口(Java API)。

ava平臺

Java平臺由Java虛擬機(Java Virtual Machine,簡稱JVM)和Java 應用編程接口(Application Programming Interface,簡稱API)構成。Java應用編程接口為此提供了一個獨立于操作系統(tǒng)的標準接口,可分為基本部分和擴展部分。在硬件或操作系統(tǒng)平臺上安裝一個Java平臺之后,Java應用程序就可運行。Java平臺已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中運行。Java應用編程接口已經(jīng)從1.1x版發(fā)展到1.2版。常用的Java平臺基于Java1.5,最近版本為Java8。

Java體系

Java分為三個體系J2SE(Java2 Platform Standard Edition,java平臺標準版),J2EE(Java 2 Platform,Enterprise Edition,java平臺企業(yè)版),J2ME(Java 2 Platform Micro Edition,java平臺微型版)。

Java優(yōu)勢

與傳統(tǒng)程序不同,Sun 公司在推出 Java 之際就將其作為一種開放的技術。全球數(shù)以萬計的 Java 開發(fā)公司被要求所設計的 Java軟件必須相互兼容?!癑ava 語言靠群體的力量而非公司的力量”是Sun公司的口號之一,并獲得了廣大軟件開發(fā)商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。

Sun 公司對 Java 編程語言的解釋是:Java 編程語言是個簡單、面向對象、分布式、解釋性、健壯、安全與系統(tǒng)無關、可移植、高性能、多線程和動態(tài)的語言。

Java 平臺是基于 Java 語言的平臺。這樣的平臺非常流行。因此微軟公司推出了與之競爭的.NET平臺以及模仿Java的C#語言。

基本概念

抽象類:規(guī)定一個或多個抽象方法的類本身必須定義為abstract,抽象類只是用來派生子類,而不能用它來創(chuàng)建對象。

final類:又稱“最終類”,它只能用來創(chuàng)建對象,而不能被繼承,與抽象類剛好相反,而且抽象類與最終類不能同時修飾同一個類。

包:Java中的包是相關類和接口的集合,創(chuàng)建包須使用關鍵字package。

多態(tài)類:在java中,對象變量是多態(tài)的。而java中不支持多重繼承。

接口:Java中的接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現(xiàn),因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)。

Java中的每一個類都是從Object類擴展而來的。

object類中的equal和toString方法。

equal用于測試一個對象是否同另一個對象相等。

toString返回一個代表該對象的字符串,每一個類都會從Object類繼承該方法,有些類重寫了該方法,以便返回當前狀態(tài)的正確表示。

(toString 方法是一個很重要的方法)

通用編程:任何類類型的所有值都可以同object類型的變量來代替。

封裝:就是把數(shù)據(jù)和行為結合起在一個包中,并對對象使用者隱藏數(shù)據(jù)的實現(xiàn)過程,一個對象中的數(shù)據(jù)叫他的實例字段(instance field)。

重載:當多個方法具有相同的名字而含有不同的參數(shù)時,便發(fā)生重載。編譯器必須挑選出調用哪個方法進行編譯。

重寫:也可稱為方法的“覆蓋。”在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。值得注意的是,子類在重新定義父類已有的方法時,應保持與父類完全相同的方法頭聲明。

數(shù)組列表:ArrayList動態(tài)數(shù)組列表,是一個類庫,定義在java.util包中,可自動調節(jié)數(shù)組的大小。

class類 object類中的getclass方法返回class類型的一個實例,程序啟動時包含在main方法的類會被加載,虛擬機要加載他需要的所有類,每一個加載的類都要加載它需要的類。

版本歷史

主條目: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[7]

2011年7月28日,Oracle公司發(fā)布Java SE 7

2014年3月18日,Oracle公司發(fā)表Java SE 8

語言特性

Java之所以被開發(fā),是要達到以下五個目的:

應當使用面向對象程序設計方法學

應當允許同一程序在不同的計算機平臺執(zhí)行

應當包括內建的對計算機網(wǎng)絡的支持

應當被設計成安全地執(zhí)行遠端代碼

應當易于使用,并借鑒以前那些面向對象語言(如C++)的長處。

Java技術主要分成幾個部分:Java語言、Java運行環(huán)境、類庫。一般情況下說Java時并不區(qū)分指的是哪個部分。

Java在1.5版本時,做了重大改變,太陽公司并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應用程序必須安裝Java Runtime Environment(JRE),JRE內部有一個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。

甲骨文(Oracle)公司對于Java的許可是“全兼容的”,這也導致了微軟和升陽(英文名:Sun,現(xiàn)已被Oracle公司收購)關于微軟的程序不支持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內提供的按鈕、文字區(qū)等均是以計算機系統(tǒng)所默認的樣式而顯示。這令Java程序在有些沒有提供圖案的計算機系統(tǒng)產(chǎn)生錯誤(在Microsoft Windows設有窗口管理器,在一些Linux distribution則沒有)。后來SUN公司針對Java AWT一些問題而推出Java Swing。

平臺無關性讓Java在服務器端軟件領域非常成功。很多服務器端軟件都使用Java或相關技術創(chuàng)建。

折疊垃圾回收(GarbageCollection)

C++語言被用戶詬病的原因之一是大多數(shù)C++編譯器不支持垃圾收集機制。通常使用C++編程的時候,程序員于程序中初始化對象時,會在主機存儲器堆棧上分配一塊存儲器與地址,當不需要此對象時,進行解構或者刪除的時候再釋放分配的存儲器地址。如果對象是在堆棧上分配的,而程序員又忘記進行刪除,那么就會造成存儲器泄漏(Memory Leak)。長此以往,程序運行的時候可能會生成很多不清除的垃圾,浪費了不必要的存儲器空間。而且如果同一存儲器地址被刪除兩次的話,程序會變得不穩(wěn)定,甚至崩潰。因此有經(jīng)驗的C++程序員都會在刪除之后將指針重置為NULL,然后在刪除之前先判斷指針是否為NULL。

C++中也可以使用“智能指針”(Smart Pointer)或者使用C++托管擴展編譯器的方法來實現(xiàn)自動化存儲器釋放,智能指針可以在標準類庫中找到,而C++托管擴展被微軟的Visual C++ 7.0及以上版本所支持。智能指針的優(yōu)點是不需引入緩慢的垃圾收集機制,而且可以不考慮線程安全的問題,但是缺點是如果不善使用智能指針的話,性能有可能不如垃圾收集機制,而且不斷地分配和釋放存儲器可能造成存儲器碎片,需要手動對堆進行壓縮。除此之外,由于智能指針是一個基于模板的功能,所以沒有經(jīng)驗的程序員在需要使用多態(tài)特性進行自動清理時也可能束手無策。

Java語言則不同,上述的情況被自動垃圾收集功能自動處理。對象的創(chuàng)建和放置都是在存儲器堆棧上面進行的。當一個對象沒有任何引用的時候,Java的自動垃圾收集機制就發(fā)揮作用,自動刪除這個對象所占用的空間,釋放存儲器以避免存儲器泄漏。

注意程序員不需要修改finalize方法,自動垃圾收集也會發(fā)生作用。但是存儲器泄漏并不是就此避免了,當程序員疏忽大意地忘記解除一個對象不應該有的引用時,存儲器泄漏仍然不可避免??傮w來講,自動垃圾收集機制要安全和簡單許多。

不同廠商、不同版本的JVM中的存儲器垃圾回收機制并不完全一樣,通常越新版本的存儲器回收機制越快,IBM、BEA、SUN等等開發(fā)JVM的公司都曾宣稱過自己制造出了世界上最快的JVM[來源請求],JVM性能的世界紀錄也在不斷的被打破并提高。

IBM有一篇有關Java存儲器回收機制比不激活垃圾收集機制的C++存儲器處理快數(shù)倍的技術文章[8],而著名的Java技術書籍《Java編程思想》(Thinking in Java)也有一段論述Java存儲器及性能達到甚至超過C++的章節(jié)[9]。

折疊接口類別

Java自帶了創(chuàng)建接口的類別,可以這樣使用:

public ? ?interface ? ?Deleteable {void delete();}

這段代碼的意思是任何實現(xiàn)(implement)Deleteable接口的類別都必須實現(xiàn)delete()方法。每個類別對這個方法的實現(xiàn)可以自行定制。由此概念可以引出很多種使用方法,下面是一個類別的例子:

publicclass Fred implements Deleteable {// 必須實作 Deleteable 介面中的 delete 方法 ? ? @Override publicvoid delete(){// 實作的程式碼}// 這個類別也可以包含其他方法publicvoid doOtherStuff(){}}

在另外一個類別中,可以使用這樣的代碼:

publicvoid deleteAll (Deleteable [] list){for(int i =0; i < list.length; i++){ ? ? ? ? ?list.delete();}}

因為隊列中所有的對象都可以使用delete()方法。Deleteable隊列中包含F(xiàn)red對象的引用,而這個類別和其他Deleteable類別在使用deleteAll()方法時候不需要進行任何改變。

之所以這樣做就是為了在接口的執(zhí)行和其代碼之間進行區(qū)別。舉例來說,一個名叫Collection的接口可以包含任何對象所需要的引入、轉換和存儲數(shù)據(jù)的方法,其他的類都可以使用這個接口。但是這個接口可以是一個可重定義大小的隊列、一個鏈表或者是其他功能的集合。

這種特性其實是一種折中的辦法。Java的設計者們不想讓Java有多重繼承的特性,因為C++的多重繼承顯示了這種特性的困難。Java的接口功能可以提供同樣的功能,但是又不會很復雜。

折疊開發(fā)接口

在Java語言中,應用程序接口(API)化身成類,并且分組成為包。每個包中包含有相關的接口和類。對于不同的平臺,Java提供了不同版本的包。API的設定由sun公司和其他公司通過JCP(Java社區(qū)程序)決定。任何公司和個人都可以參與這個工程,對API進行設計。2004年,IBM和BEA公司準備聯(lián)合對官方的Java開源軟件工程進行支持,但是2005年初,sun公司拒絕了這個支持。

義烏市森焱網(wǎng)絡是棋牌游戲開發(fā)公司,棋牌源碼定制,俱樂部棋牌游戲,可為您量身定做H5源碼