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個必要條件:繼承,方法重寫,父類引用指向子類對象
  • 父類引用指向子類對象後,用該父類引用調用子類重寫的方法,此時多態就出現了