JAVA基礎你需要知道的幾點
- 2020 年 6 月 27 日
- 筆記
一.關於變數
變數可以看成可操作的存儲空間,有如下三種:
局部變數:定義在方法或語句塊內部,必須先聲明初始化才能使用;生命周期從聲明位置開始到方法或語句塊執行完畢。
成員變數(實例變數):定義在方法外部,類的內部,會自動被初始化;從屬對象,生命周期伴隨對象始終。
靜態變數:使用static定義,從屬類;生命周期伴隨類始終,從類載入到卸載。
二.記憶體分析
java虛擬機的記憶體可分為三個區域:棧stack,堆heap,方法區method area。
1.棧的特點:
- 棧描述的是方法執行的記憶體模型;每個方法被調用都會創建一個棧幀(存儲局部變數,操作數,方法出口等)
- JVM為每個執行緒創建一個棧,用於存放該執行緒執行方法的資訊(實際參數,局部變數等)
- 棧屬於執行緒私有,不能實現執行緒間的共享
- 棧的存儲特性是『先進後出,後進先出『
- 棧是由系統自動分配,速度快,棧是一個連續的記憶體空間
2.堆的特點:
- 堆用於存儲創建好的對象和數組(數組也是對象)
- JVM只有一個堆,被所有執行緒共享
- 堆是一個不連續的記憶體空間,分配靈活,速度慢
3.方法區(靜態區)的特點:
- JVM只有一個方法區,被所有執行緒共享
- 方法區實際上也是堆,知識用於存儲類,常量相關資訊
- 用來存放程式中永遠不變或唯一的內容(類資訊【class對象】,靜態變數,字元串常量)
三.關於構造器(也叫構造方法,用於對象初始化)
- 通過new關鍵字調用
- 構造器雖然有返回值,但不能定義返回值類型(返回值類型是其本類),不能在構造器里使用return返回某個值
- 如果沒有定義構造器,編譯器會自動定義一個無參構造函數;如果已定義,則編譯器不會自動添加構造函數
- 構造器的方法名必須和類名一致
四.static關鍵字
- 在類中,用static聲明的成員變數為靜態成員變數,也稱類變數;類變數的生命周期和類相同,在整個應用程式執行期間都有效
- static修飾的成員變數和方法,從屬於類,普通變數和方法從屬於對象
- 非靜態方法可以調用靜態方法,靜態方法不能調用非靜態方法(可聯繫記憶體分析知識理解)
五.重寫和重載
重寫和重載的關鍵都在於參數列表,這裡簡單概括一下:
- 重寫:通俗說就是對一個方法的不同實現,方法名和形參列表(參數類型,個數,順序)相同;返回值類型和聲明異常類型,子類要小於等於其父類(也就說子類重寫可以返回的是父類的派生類);訪問許可權子類要大於等於其父類(比如父類被聲明public,那子類重寫就不能聲明為protected
- 重載:方法名相同,參數列表不同(參數類型,個數),返回值可以不同
六.==和equals
- ==代表的是比較雙方是否相同,如果是基本類型則表示值相等;如果是引用類型則表示地址相等,即是同一個對象。
- Object類中有定義:public boolean equals(Object obj)方法,提供定義「對象內容是否相等的邏輯」
七.訪問控制符(封裝)
- private:表示私有,只有自己類能訪問
- default:表示沒有修飾符修飾,只有同一個包的類能訪問
- protected:表示可以被同一個包的類以及其他包中的子類訪問
- public:表示可以被該項目所有包中的所有類訪問
八.多態
多態指同一個方法調用,由於對象不同可能會有不同的行為。
- 多態是方法的多態,不是屬性的多態(多態與屬性無關)
- 多態的存在要有3個必要條件:繼承,方法重寫,父類引用指向子類對象
- 父類引用指向子類對象後,用該父類引用調用子類重寫的方法,此時多態就出現了