在上一篇中說到了Java的四大特性,裏面出現了不少名次,包括之後學習Java中也會出現不少經常使用到的名次,對初學者來講可能不知道是什麼意思,或者是對這些刺耳的理解不是特別透徹,這裏我就我本身的理解來解釋下這些詞的意思。java
包sql
在Java中常說某個包下面的某個類。那麼什麼是包呢?在平時操做電腦時,咱們常江某個文檔,視頻,音頻等問價放在某個文件夾下,而這個文件夾在Java中就就叫作包。其實飽和文件夾在某種意義上來講是等同的,只是在Java中將其叫作包而不叫作文件夾。架構
類併發
放在包下面的一個個而且是以.java結尾的文件就是類。前面有說道對想是Java程序的核心,而類描述了對象的屬性和對象的行爲,類是對象模板【類是對對象的抽象,對象是對類的實例化】分佈式
類按類型分爲普通類,抽象類,接口,嵌套類等。按層級分又分爲父類和子類高併發
普通類性能
【訪問修飾符】 class 類名 【implements/extends 類名】{ },其中有一種特殊的類object類,object類是全部類的父類,若是一個類沒有用extends明確指出繼承於某個類,那麼它默認繼承Object類。學習
抽象類this
當一個類中沒有足夠的信息描述一個具體的書屋時,這個類就是抽象類。spa
語法:【訪問修飾符】 abstract class 類名{ }
特色:
一、抽象類不能實例化
二、抽象類能夠擁有構造方法
三、抽象類能夠聲明實例變量,也能夠聲明靜態變量,也能夠存在普通方法和靜態方法,變量在抽象類中能夠初始化
四、抽象類中還能夠有抽象方法 語法:【訪問修飾符】 abstract 返回值類型 方法名 (【參數】);
五、抽象類抽象方法,有抽象類的子類來實現
六、若是一個類是抽象類,那麼這個類的不必定有抽象方法,但若是一個類有抽象方法,那麼這個類必定是抽象類
七、若是抽象類的子類沒有吧抽象類中的全部抽象方法實現,則子類也須要定義成抽象類,有子類的子類負責實現剩餘的抽象方法。
八、普通方法在子類中與普通類同樣,能夠實現也能夠不實現
接口
就是對外提供了一系列功能的生命(也能夠說接口中定義的方法只有方法的生命,沒有方法體)
語法:【訪問修飾符】 interface 接口名 {
//常量和方法的聲明
}
1 public interface demo{ 2 int i=0; 3 public void add() ;
4 } 特色:
一、接口中聲明的方法沒有方法體,只有方法的聲明
二、接口中聲明的成員屬性都是靜態的並且都是不可變的,由於接口中的成員屬性默認都是public static final 來修飾的
三、接口沒有構造方法,也不能被實例化
四、接口能夠實現多繼承,接口之間用逗號隔開
五、接口中的方法只能被public來修飾,就算沒有明確的神明訪問修飾符,默認也是public
經過implements來實現接口,語法:
【訪問修飾符】 class 類名 implements 接口1,接口2{ }
嵌套類
聲明在類的內部的類稱之爲嵌套類
語法:【訪問修飾符】 class 類名{
【訪問修飾符】【static】 class 類名{
}
}
分類:內部類:非靜態嵌套類
靜態嵌套類:用static修飾的嵌套類
內部類:內部類做爲外部類的一個成員存在,與外部類的成員變量,成員方法並列
局部內部類:在方法體內聲明的類,能夠訪問他所在方法中的final參數和final局部變量
靜態嵌套類中可聲明static成員或非靜態成員變量,但只能訪問外部類中的靜態成員
方法
方法就是實現某個功能的代碼塊
方法的定義語法:
一、無返回值無參數的方法 【訪問修飾符】 void 方法名(){ //方法的功能代碼 }
說明:void就是表示該方法是無返回值得(也就是說調用完該方法不會返回一個結果)
二、無返回值有參數的方法 【訪問修飾符】 void 方法名(數據類型 參數名,...){//方法的功能代碼}
說明:方法中的參數又稱爲形參(形式意義的參數),調用該方法時傳遞的數據稱爲實參(實際的數據),傳遞的參數要和方法中的參數類型匹配
三、有返回值無參數的方法 【訪問修飾符】 返回值類型 方法名稱(){ return 返回值; }
說明:一、返回值類型有放回值來決定
二、在由返回值得方法的最後一句代碼,必定是 return 返回值;。
複製代碼
四、有返回值有參數的方法 【訪問修飾符】 返回值類型 方法名(參數列表){ return 返回值}
變量
定義:在Java中用來存儲數據的元素,並且該元素所存放的數據時能夠變化的,因此稱爲變量
注意:變量也是標識符的一部分
語法:一、變身名變賦值 數據類型 變量名稱=變量值
二、先聲明後賦值 數據類型 變量名稱;變量名稱=變量值;
定義變量的四個步驟:
一、聲明數據類型其實就是爲了根據數據類型開闢相應的內存空間
二、給變量命名,其實就會說爲了可以把變量名和數據類型所對應的內存空間進行關聯
三、給變量賦值,其實就是把數據存放到變量名所對應的內存空間
四、使用變量,其實就是把變量所對應的內存空間中的數據讀取出來
常量
定義:在程序中他的值是不可變的,這樣的冤死及時常量
語法:final 數據類型 常量名稱=常量值;
建議:常量名稱通常所有大寫
標識符
標識符就是類名,方法名,參數名,包名等元素命名時,所寫的字符序列就統稱爲標識符
標識符的命名規則:
一、有字幕,數字,下劃線,和$組成
二、不能以數字開頭
三、嚴格區分大小寫
四、長度無限制
五、不能是Java的關鍵字和保留關鍵字
建議:見名知意
訪問修飾符
在定義類、屬性、方法時都須要指定訪問修飾符,以此來限定類、屬性、方法的可訪問範圍。Java中的訪問修飾符有如下幾個關鍵字:
public:公共。該類或非該類都可訪問
private:私有的。只有在類的主體中才能夠訪問。只能修飾屬性和方法,不能修飾類
protected:受保護。該類及子類的成員都可以訪問,同一個包中的類也能夠訪問。只能修飾屬性和方法,不能修飾類
默認:不使用修飾符。只有相同包中的類才能夠訪問
位置 private 默認 protected public 同一個類 是 是 是 是 同一個包內的類 否 是 是 是 不一樣保內的類 否 否 是 是 不一樣包內不一樣類 否 否 否 是 關鍵字
在Java中被賦予了必定特殊意義和用途的單詞
保留關鍵字也是關鍵字,只是目前沒有任何的特殊意義和用途,保留使用。
this關鍵字
使用範圍:this關鍵字只能使用在沒有被static關鍵字修飾的方法中
做用:this關鍵字就會說對當類某個對象的引用(簡單來講就是能夠把this看作當前類的一個對象,哪一個對象調用當前的方法,this關鍵字就指向該對象)
【當局部變量和成員變量徹底一致時,以局部變量爲主,即就近原則】
用法:
一、當方法中的參數名或變量名和成員變量徹底一致時,能夠經過this關鍵字來區分做用域
二、當this關鍵字以this(參數列表)的形式,出如今構造方法的第一句時,就表示當前構造方法調用了該類中其餘的構造方法。
final關鍵字
一、final修飾的變量等同於常量,一旦賦值就沒法更改(是指引用變量不能變,引用變量所指向的對象的內容仍是能夠改變的)
【final不管修飾全局變量仍是局部變量,在定義時都必修要初始化才能使用】
二、final修飾方法中的參數稱爲最終參數,在方法體中一樣也不能爲最終參數從新賦值
三、final修飾類,該類不能被繼承
四、final修飾的方法,不能被重寫
staitic關鍵字
static能夠修飾變量,方法,代碼塊
static修飾變量,也稱爲類變量,由於static關鍵字修飾的變量,方法,代碼塊都屬於類,而不屬於某個對象
【實例變量:沒有被static修飾的成員屬性或方法都屬於某個對象,也叫作實例屬性或實例方法,對象存在了,纔會有實例變量開闢空間】
static修飾的屬相、方法能夠經過:類名.屬性名或l類名.方法(參數)的形式來調用
特色:
一、靜態方法中只能訪問靜態方法和靜態的成員變量
二、在非靜態方法中,既能夠訪問非靜態的方法、屬性,也能夠訪問靜態屬性和靜態方法
三、在靜態方法中不能使用this和supper關鍵字,由於this和supper表示對對象的引用,而static修飾的方法是屬於類,因此在語法上存在必定的衝突
靜態代碼塊:靜態代碼塊只能出如今類的內部,任何方法的外部
靜態代碼塊語法:static{ }
靜態代碼塊做用:就是給靜態的成員屬性進行初始化
靜態代碼塊的優先級比構造方法的優先級高
方法中參數的傳遞
在Java中不管是基本數據類型仍是引用數據類型,在進行參數的傳遞時,都是採用的值傳遞(也就是傳遞的都是具體的數據)
基本數據類型在進行參數傳遞時,傳遞的值是副本,也就是說當把當前數據複製一份,而後再進行穿絲,因此目標方法中,對參數進行修改,這個值得自己是沒有任何變化的
引用數據類型字進行參數的傳遞時,傳遞的是數據所在的內存地址,因此在目標方法中,對參數進行修改,這個值自己也會發生相應的變化
向上轉型和向下轉型
向上轉型:把一個子類的對象,賦值給父類,就會把該對象當作父類對象來用
動態(延遲)綁定機制:在程序運行期間,會根據對象的真正的建立者來決定調用那個方法
發生動態綁定機制的條件:一、繼承 二、重寫 三、向上轉型 四、用向上轉型的對象調用被子類重寫的方法
向下轉型:把一個父類對象,複製給某個子類,須要加上強制轉換符
向下轉型必定是在向上轉型的基礎上類型的還原
向下轉型調用子類中的沒有重寫的方法
能夠經過instanceof關鍵字來判斷某個獨享是否屬於某各種 歡迎工做一到五年的Java工程師朋友們加入Java羣: 741514154 羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!