Java工程師【2020升級版】

weixin_53406457發表於2020-12-09

download: Java工程師【2020升級版已完結】

本課程全新升級,從0基礎到高薪就業,不需脫產學習,衝擊網際網路高薪崗位
無論你是未就業的學生還是想轉行的在職人員,不需要基礎,只要你有夢想,想高薪!

起源介紹
Java是一種計算機程式語言,擁有跨平臺、物件導向、泛型程式設計的特性,廣泛應用於企業級Web應用開發和移動應用開發。任職於太陽微系統的詹姆斯·高斯林等人於1990年代初開發Java語言的雛形,最初被命名為Oak,目標設定在家用電器等小型系統的程式語言,應用在電視機、電話、鬧鐘、烤麵包機等家用電器的控制和通訊。由於這些智慧化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。隨著1990年代網際網路的發展,Sun公司看見Oak在網際網路上應用的前景,於是改造了Oak,於1995年5月以Java的名稱正式釋出。Java伴隨著網際網路的迅猛發展而發展,逐漸成為重要的網路程式語言。用Java實現的HotJava瀏覽器(支援Java applet)顯示了Java的魅力:跨平臺、動態的Web、Internet計算。從此,Java被廣泛接受並推動了Web的迅速發展,常用的瀏覽器均支援Javaapplet。另一方面,Java技術也不斷更新。(2010年Oracle公司收購了SUN)

摺疊編輯本段基本組成
Java由四方面組成:Java程式語言、Java類檔案格式、Java虛擬機器和Java應用程式介面(Java API)。

摺疊編輯本段Java平臺
Java平臺由Java虛擬機器(Java Virtual Machine,簡稱JVM)和Java 應用程式設計介面(Application Programming Interface,簡稱API)構成。Java應用程式設計介面為此提供了一個獨立於作業系統的標準介面,可分為基本部分和擴充套件部分。在硬體或作業系統平臺上安裝一個Java平臺之後,Java應用程式就可執行。Java平臺已經嵌入了幾乎所有的作業系統。這樣Java程式可以只編譯一次,就可以在各種系統中執行。Java應用程式設計介面已經從1.1x版發展到1.2版。常用的Java平臺基於Java1.5,最近版本為Java8。

摺疊編輯本段Java體系
Java分為三個體系J2SE(Java2 Platform Standard Edition,java平臺標準版),J2EE(Java 2 Platform,Enterprise Edition,java平臺企業版),J2ME(Java 2 Platform Micro Edition,java平臺微型版)。

摺疊編輯本段Java優勢
與傳統程式不同,Sun 公司在推出 Java 之際就將其作為一種開放的技術。全球數以萬計的 Java 開發公司被要求所設計的 Java軟體必須相互相容。“Java 語言靠群體的力量而非公司的力量”是Sun公司的口號之一,並獲得了廣大軟體開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。

Sun 公司對 Java 程式語言的解釋是:Java 程式語言是個簡單、物件導向、分散式、解釋性、健壯、安全與系統無關、可移植、高效能、多執行緒和動態的語言。

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

摺疊編輯本段基本概念
抽象類:規定一個或多個抽象方法的類本身必須定義為abstract,抽象類只是用來派生子類,而不能用它來建立物件。

final類:又稱“最終類”,它只能用來建立物件,而不能被繼承,與抽象類剛好相反,而且抽象類與最終類不能同時修飾同一個類。

包:Java中的包是相關類和介面的集合,建立包須使用關鍵字package。

多型類:在java中,物件變數是多型的。而java中不支援多重繼承。

介面:Java中的介面是一系列方法的宣告,是一些方法特徵的集合,一個介面只有方法的特徵沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

Java中的每一個類都是從Object類擴充套件而來的。

object類中的equal和toString方法。

equal用於測試一個物件是否同另一個物件相等。

toString返回一個代表該物件的字串,每一個類都會從Object類繼承該方法,有些類重寫了該方法,以便返回當前狀態的正確表示。

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

通用程式設計:任何類型別的所有值都可以同object型別的變數來代替。

封裝:就是把資料和行為結合起在一個包中,並對物件使用者隱藏資料的實現過程,一個物件中的資料叫他的例項欄位(instance field)。

過載:當多個方法具有相同的名字而含有不同的引數時,便發生過載。編譯器必須挑選出呼叫哪個方法進行編譯。

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

陣列列表:ArrayList動態陣列列表,是一個類庫,定義在java.util包中,可自動調節陣列的大小。

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

摺疊編輯本段版本歷史
主條目: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的三個版本:標準版(J2SE)、企業版(J2EE)和微型版(J2ME)

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年12月,SUN公司釋出Java EE 6

2010年11月,由於Oracle公司對於Java社群的不友善,因此Apache揚言將退出JCP[7]

2011年7月28日,Oracle公司釋出Java SE 7

2014年3月18日,Oracle公司發表Java SE 8

摺疊編輯本段語言特性
Java之所以被開發,是要達到以下五個目的:

應當使用物件導向程式設計方法學

應當允許同一程式在不同的計算機平臺執行

應當包括內建的對計算機網路的支援

應當被設計成安全地執行遠端程式碼

應當易於使用,並借鑑以前那些面嚮物件語言(如C++)的長處。

Java技術主要分成幾個部分:Java語言、Java執行環境、類庫。一般情況下說Java時並不區分指的是哪個部分。

Java在1.5版本時,做了重大改變,太陽公司並1.5版本重新命名為Java 5.0。

摺疊物件導向
Java的特點之一就是物件導向,是程式設計方法的一種。“物件導向程式設計語言”的核心之一就是開發者在設計軟體的時候可以使用自定義的型別和關聯操作。程式碼和資料的實際集合體叫做“物件”。一個物件可以想像成繫結了很多“行為(程式碼)”和“狀態(資料)”的物體。對於資料結構的改變需要和程式碼進行通訊然後操作,反之亦然。物件導向設計讓大型軟體工程的計劃和設計變得更容易管理,能增強工程的健康度,減少失敗工程的數量。

摺疊跨平臺性
Java語言的第二個特性就是跨平臺性,也就是說使用Java語言編寫的程式可以在編譯後不用經過任何更改,就能在任何硬體裝置條件下執行。這個特性經常被稱為“一次編譯,到處執行”。

執行Java應用程式必須安裝Java Runtime Environment(JRE),JRE內部有一個Java虛擬機器(Java Virtual Machine,JVM)以及一些標準的類庫(Class Library)。通過JVM才能在電腦系統執行Java應用程式(Java Application),這與.Net Framework的情況一樣,所以電腦上沒有安裝JVM,那麼這些程式將不能夠執行。

實現跨平臺性的方法是大多數編譯器在進行Java語言程式的編碼時候會生成一個用位元組碼寫成的“半成品”,這個“半成品”會在Java虛擬機器(解釋層)的幫助下執行,虛擬機器會把它轉換成當前所處硬體平臺的原始程式碼。之後,Java虛擬機器會開啟標準庫,進行資料(圖片、執行緒和網路)的訪問工作。主要注意的是,儘管已經存在一個進行程式碼翻譯的解釋層,有些時候Java的位元組碼程式碼還是會被JIT編譯器進行二次編譯。

有些編譯器,比如GCJ,可以自動生成原始程式碼而不需要解釋層。但是這些編譯器所生成的程式碼只能應用於特定平臺。並且GCJ目前只支援部分的Java API。

甲骨文(Oracle)公司對於Java的許可是“全相容的”,這也導致了微軟和昇陽(英文名:Sun,現已被Oracle公司收購)關於微軟的程式不支援RMI和JNI介面、並且增加特性為己所用的法律爭端。昇陽最終贏得了官司,獲得了大約兩千萬美元的賠償,法院強制要求微軟執行昇陽公司關於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程式在有些沒有提供圖案的計算機系統產生錯誤(在Microsoft Windows設有視窗管理器,在一些Linux distribution則沒有)。後來SUN公司針對Java AWT一些問題而推出Java Swing。

平臺無關性讓Java在伺服器端軟體領域非常成功。很多伺服器端軟體都使用Java或相關技術建立。

摺疊垃圾回收(GarbageCollection)
C++語言被使用者詬病的原因之一是大多數C++編譯器不支援垃圾收集機制。通常使用C++程式設計的時候,程式設計師於程式中初始化物件時,會在主機儲存器堆疊上分配一塊儲存器與地址,當不需要此物件時,進行解構或者刪除的時候再釋放分配的儲存器地址。如果物件是在堆疊上分配的,而程式設計師又忘記進行刪除,那麼就會造成儲存器洩漏(Memory Leak)。長此以往,程式執行的時候可能會生成很多不清除的垃圾,浪費了不必要的儲存器空間。而且如果同一儲存器地址被刪除兩次的話,程式會變得不穩定,甚至崩潰。因此有經驗的C++程式設計師都會在刪除之後將指標重置為NULL,然後在刪除之前先判斷指標是否為NULL。

C++中也可以使用“智慧指標”(Smart Pointer)或者使用C++託管擴充套件編譯器的方法來實現自動化儲存器釋放,智慧指標可以在標準類庫中找到,而C++託管擴充套件被微軟的Visual C++ 7.0及以上版本所支援。智慧指標的優點是不需引入緩慢的垃圾收集機制,而且可以不考慮執行緒安全的問題,但是缺點是如果不善使用智慧指標的話,效能有可能不如垃圾收集機制,而且不斷地分配和釋放儲存器可能造成儲存器碎片,需要手動對堆進行壓縮。除此之外,由於智慧指標是一個基於模板的功能,所以沒有經驗的程式設計師在需要使用多型特性進行自動清理時也可能束手無策。

Java語言則不同,上述的情況被自動垃圾收集功能自動處理。物件的建立和放置都是在儲存器堆疊上面進行的。當一個物件沒有任何引用的時候,Java的自動垃圾收集機制就發揮作用,自動刪除這個物件所佔用的空間,釋放儲存器以避免儲存器洩漏。

注意程式設計師不需要修改finalize方法,自動垃圾收集也會發生作用。但是儲存器洩漏並不是就此避免了,當程式設計師疏忽大意地忘記解除一個物件不應該有的引用時,儲存器洩漏仍然不可避免。總體來講,自動垃圾收集機制要安全和簡單許多。

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

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

摺疊介面類別
Java自帶了建立介面的類別,可以這樣使用:

public interface Deleteable {void delete();}

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

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佇列中包含Fred物件的引用,而這個類別和其他Deleteable類別在使用deleteAll()方法時候不需要進行任何改變。

之所以這樣做就是為了在介面的執行和其程式碼之間進行區別。舉例來說,一個名叫Collection的介面可以包含任何物件所需要的引入、轉換和儲存資料的方法,其他的類都可以使用這個介面。但是這個介面可以是一個可重定義大小的佇列、一個連結串列或者是其他功能的集合。

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

摺疊開發介面
在Java語言中,應用程式介面(API)化身成類,並且分組成為包。每個包中包含有相關的介面和類。對於不同的平臺,Java提供了不同版本的包。API的設定由sun公司和其他公司通過JCP(Java社群程式)決定。任何公司和個人都可以參與這個工程,對API進行設計。2004年,IBM和BEA公司準備聯合對官方的Java開源軟體工程進行支援,但是2005年初,sun公司拒絕了這個支援。

摺疊編輯本段品牌命名
JAVA(中文名佳沃)最初源自設計師名字的組合:JACOPO GOSLING(雅科波·高斯林)Andrea.WILIER(安德列亞.威廉)VITTORIO (維托裡奧)ALBERTO .BARIN(阿爾伯特·博瑞),JAVA義大利設計團隊的努力,同時這個名字也是出於JAVA團隊對咖啡的喜愛,因此Java用“咖啡”來命名。類檔案的前四個位元組如果用十六進位制閱讀的話,分別為”CA FE BA BE“,就會拼出兩個單詞“CAFE BABE”(咖啡寶貝)“。JAVA是印度尼西亞爪哇島的英文名稱,因盛產咖啡而著名。JAVA自行車中的許多車類名稱多與咖啡有關。如DECAF(去咖啡因的咖啡),ESPRESSO(濃縮咖啡)以及MOKA(摩卡)等等,同時JAVA的LOGO也正如一杯冒著熱氣的咖啡。

相關文章