前言:自從出生,每一個人都是一個學習者或探索者。永遠保持一顆謙遜的心態,遵循必定的方法和規範,去學習和實踐,永遠記得走走停停,多回頭看看本身走過的路,溫故而知新,也能更好地指導將來的路怎麼走(一樣,本篇文章也會根據知識的完善和技能的提高而不斷更新)。java
如需更多Java、Python、大數據體系知識,請移步我的技術文檔:https://anxiangchegu.github.io/technical-docgit
1、Java簡介程序員
一、Java是一門面向對象的編程語言,不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等概念,所以Java語言具備功能強大和簡單易用兩個特徵。Java語言做爲靜態面向對象編程語言的表明,極好地實現了面向對象理論容許程序員以優雅的思惟方式(思想很重要)進行復雜的編程。github
二、Java具備簡單性、面向對象、分佈式、健壯性、安全性、平臺獨立與可移植性、動態性特色。Java能夠編寫桌面應用程序、Web應用程序、分佈式系統和嵌入式系統應用程序等。算法
三、Java三大致系:編程
Java SE(J2SE)數組
Java EE安全
Java Me網絡
一、java語言是簡單的:java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用。另外一方面,Java丟棄了C++中不多使用的、很難理解的、使人迷惑的那些特性,如操做符承載、多繼承、自動的強制類型轉換,尤爲是,Java語言不使用指針,而是引用。並提供了自動的廢料收集,使得程序員沒必要爲內存管理而擔心。多線程
二、Java語言是動態的:Java語言的設計目標之一就是適應於動態變化的環境,.Java程序須要的類可以動態地被載入到運行環境,也能夠經過網絡來載入動態的類,這也有利於軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行類型時候的檢查。
三、Java語言是面向對象的:Java語言提供類、接口和繼承等原語,爲了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,並支持類與接口之間的實現機制(關鍵字implements),Java語言全面支持多動態綁定,而C++語言只對虛函數使用動態綁定。Java是一個純面面對象設計的程序語言!
四、Jva語言是多線程的:在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來建立,一般有兩種方法來建立線程:第1、使用型構爲Thread(Runable)構造子將一個實現了Runnable接口的對象包裝成了一個線程。第2、從Thread類派生出子類並重寫run方法,使用該子類建立的對象即爲線程。注意Thread類已經實現了runnable接口,所以任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制,Java語言支持多個線程的同時執行,並提供多線程之間的同步機制(關鍵字爲synchronized)。
五、Java語言是分佈式的:Java語言支持Internet的應用開發,在基本的Java應用編程接口中有一個網絡應用編程接口(Java net),它提供了用於網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分佈式應用的重要手段。
六、Java語言是高性能的:與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨着JIT(Just-In-Time)編譯器的技術發展愈來愈接近C++。
七、Java語言是健壯性的:Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇,Java的安全檢查機制使得Java更具健壯性。
八、Java語言是解釋型的:Java程序在Java平臺上被編譯爲字節碼格式,而後能夠在實現這個Java平臺的任何系統中運行。在運行時,Java平臺中的Java解釋器對這些字節碼文件進行解釋執行,執行過程當中須要的類在鏈接階段被載入到環境中運行。
九、Java語言是安全的:Java一般被用在網絡環境中,爲此Java提供了安全機制,以防惡意代碼的攻擊。除了Java具備的許多安全特性之外,Java對經過網絡環境下載的類具備一個安全防範機制(類ClassLoder),如分配不一樣的名字空間,以防替代本地的同名類、字節碼檢查,並提供安全管理機制(SecurityManager),讓Java應用設置安全崗兵。
十、Java語言是可移植的:這種移植性來源於體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統自己也具備很強的可移植性,Java編譯器是用Java實現 的,Java的運行環境是用ANSI C實現的。
十一、Java語言是體系結構中立的:Java程序(後綴名爲java的文件)在Java平臺上被編譯爲體系結構中立的字節碼格式(後綴名爲class文件),而後能夠在實現這個Java平臺的任何系統中運行,這種途徑適合於異構的網絡環境和軟件的分發。
封裝、繼承和多態。
一、封裝:在Java中,封裝是由類(Class)實現的。把現實生活中某一實體抽象成類,且該類包括屬性(Type)、方法(Method),如把「學生」抽象成類,「學生」類有對應的屬性name、age和方法study。(對於Java中的類,每一個類中均可以有屬性和方法,類屬性又叫作成員變量)
1 public class Pserson{ 2 private String name; // 屬性 3 private int age; // 屬性 4 public void eat(){ // 方法 5 } 6 }
二、繼承:繼承描述的是一種類與類的關係,好比學生是屬於人的範疇,Student類(子類)繼承Person類(父類),Student類就被稱爲是Person類的子類(或派生類),Person類就是Student類父類(或基類)。
1 public class Pserson{ 2 private String name; // 屬性 3 private int age; // 屬性 4 public void eat(){ // 方法 5 } 6 } 7 8 // Student類繼承Person類 9 public class Student extedns Pserson{ 10 11 }
三、多態:多態是同一個行爲具備多個不一樣表現形式或形態的能力。多態有引用多態(父類引用指向子類對象)和方法多態(子類重寫的方法或繼承自父類的方法)兩種,多態能夠消除類型之間的耦合關係。
(1)多態存在的三個必要條件:繼承、重寫、父類引用指向子類對象。
(2)多態的實現方式:重寫、接口、抽象類和抽象方法。
(1)對象:是類的一個實例,有狀態和行爲。如:學生是一個對象,他的狀態有:身高、體重、膚色、年齡等;行爲有:吃飯、學習、玩耍和睡覺等。
(2)類:類是一個模板,它描述一類對象的行爲和狀態。
(3)方法:方法就是行爲,一個類能夠有不少方法,邏輯運算、數據運算以及全部動做都是在方法中完成的。
(4)實例變量:每個對象都有特定的實例變量,對象的狀態由這些實例變量的值決定。
(1)大小寫敏感:在Java語言環境裏,是對大小寫敏感的。標識符Hello和hello是不一樣的表示。
(2)類名:對於全部的類來講,類名的首字母應該大寫。若是類名由若干單詞組成,則後面每一個單詞的首字母大寫。
(3)源文件名:源文件名必須和類文件名相同,當保存文件的時候,應該使用類名和文件名保存(切記Java是大小寫敏感的語言),文件名的後綴是.java。
(4)主方法入口:全部的Java程序由public static void main (String [ ]args)方法開始執行。
強調:爲了碼出高效,碼出質量——推薦閱讀學習《阿里巴巴Java開發手冊(終極版)》。
Java全部的組成部分都須要名字。類名、變量名以及方法名都被稱爲標識符。
注意:
(1)全部的標識符都應該以字母(A~Z或a~z),美圓符($)、或者下劃線(_)開始;
(2)首字符以後能夠是字母(A~Z或a~z),美圓符($)、或者下劃線(_)的任何字符組合;
(3)關鍵字不能用作標識符;
(4)標識符是大小寫敏感的。
(1)訪問控制修飾符:default,public,protected,private;
(2)非訪問控制修飾符:final,abstract,strictfp。
(1)局部變量;
(2)類變量(靜態變量);
(3)成員變量(非靜態變量)。
接口就是對象之間相互通訊的協議。接口只定義派生要用的方法,可是方法的具體實現徹底取決於派生類。
枚舉限制變量只能是預先設定好的值。枚舉能夠單獨聲明或者聲明在類裏面,方法、變量和構造函數也能夠在枚舉中定義。
數組是存儲在堆上的對象,能夠保存多個同類型變量。
(1)類及類的構成成分屬性、方法、構造器、代碼塊、內部類;
(2)面向對象的特徵:封裝性、繼承性、多態性(抽象性);
(3)其它的關鍵字:this\super\package\import\static\final\abstract\interface
(1)類:對事物、邏輯、算法或概念的抽象。描述一類對象的行爲和狀態。
(2)對象(實例):對象是類的一個實例(對象不是找個男或女友),有狀態和行爲。
(3)引用:Java中一切都」看做「對象,但操縱標識符實際是指向一個對象的「引用」(reference)。
(4)構造方法:新建對象時,執行的一個特殊方法。在建立一個對象的時候,至少要調用一個構造方法,構造方法的名稱必須與類同名,一個類能夠有多個構造方法。
(6)this:這個關鍵字必須放在非靜態方法裏面,this關鍵字表明自身,在程序中主要有三個用途:使用this關鍵字引用成員變量;使用this關鍵字在自身構造方法內部引用其它構造方法;this關鍵字表明自身類的對象。
(7)方法重載(overload):就是方法名相同,方法參數的個數和類型不一樣函數。Java的重載是發生在本類的,前提條件是本類中存在多個同名不一樣參的方法。
(8)抽象類:抽象方法必須用 abstract 關鍵字進行修飾,若是一個類含有抽象方法,則稱這個類爲抽象類,抽象類必須用abstract關鍵字修飾,抽象類中含有無具體實現的方法,因此不能用抽象類建立對象。
1 public abstract class ClassName { 2 abstract void fun(); // 抽象方法 3 }
(9)接口(Interface):極端的抽象類,在結構設計中用於解耦合。接口中的變量會被隱式地指定爲public static final變量(而且只能是public static final變量,用private修飾會報編譯錯誤),而方法會被隱式地指定爲public abstract方法且只能是public abstract方法(用其餘關鍵字,好比private、protected、static、 final等修飾會報編譯錯誤),而且接口中全部的方法不能有具體的實現,也就是說,接口中的方法必須都是抽象方法。從這裏能夠隱約看出接口和抽象類的區別,接口是一種極度抽象的類型,它比抽象類更加「抽象」,而且通常狀況下不在接口中定義變量。
每一個內部類都能獨立地繼承一個(接口的)實現,接口只是解決了部分問題,而內部類使得多重繼承的解決方案變得更加完整。內部類能夠用多個實例,每一個實例都有本身的狀態信息,而且與其它外圍對象的信息相互獨立。(詳細參考 :http://cmsblogs.com/?p=63)
(1)非靜態內部類:非靜態內部類依賴於外部類對象存在,在非靜態內部類中,不能定義非靜態成員;
(2)靜態內部類:使用static 修飾的成員內部類,稱之爲靜態內部類,靜態內部類只能訪問外部類的靜態成員;
(3)局部內部類:聲明在方法內部的類,局部類型只能在局部使用,但它的實例能夠轉爲父類型傳遞出去。
注意:不能夠修飾任何訪問權限修飾符;不能夠直接訪問局部變量(方法的參數等效於局部變量);若是必定須要訪問,則須要使用final對局部變量進行修飾。
(4)成員內部類:在類(外部類)的內部,且與外部類的成員是「同一級別」的。
(5)匿名內部類:直接建立已知類的子類對象,則該對象的類型就是匿名內部類。
技術文檔體系已經獨立維護
如需更多Java、Python、大數據體系知識,請移步我的技術文檔:https://anxiangchegu.github.io/technical-doc