Java基礎學習總結筆記
Java基礎
Java常用記憶體區域
- 棧記憶體空間:存儲引用堆記憶體空間的地址
- 堆記憶體空間:保存每個對象的具體屬性內容
- 全局數據區:保存static類型的屬性
- 全局程式碼區:保存所有的方法定義
修飾符
許可權修飾符
5
修飾符 | 同一個類中 | 同一個包中子類無關類 | 不同包的子類 | 不同包的無關類 |
---|---|---|---|---|
private | √ | |||
默認 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
狀態修飾符
this關鍵字
-
表示該類的屬性變數:this.變數名
-
調用本類的構造方法:this()
-
表示當前類,可調用成員方法:this.成原方法名()
static關鍵字
- 聲明屬性:使之獨立於對象,成為全局屬性(亦稱靜態屬性)
- 聲明方法:使之成為”類方法”,可直接通過類名調用:<類名>.<方法名>()
- 靜態成員方法只能訪問靜態的成員變數或方法
final關鍵字
- final聲明的類不能有子類
- final聲明的方法不能被子類覆寫
- final修飾的變數
- 基本類型:修飾數據值,不能被改變
- 引用類型:修飾地址值,地址不可以被改變,地址指向的數據可以改變
繼承
-
訪問父類的成員變數:super.變數名
-
關鍵字 訪問成員變數 訪問構造方法 this this.成員變數
訪問本類成員變數this()
訪問本類構造方法super super.成員變數
訪問父類成員變數super()
訪問父類構造方法 -
通過子類對象訪問一個方法
- 先在子類範圍內尋找
- 再在父類範圍尋找
-
-
子類中所有構造方法被調用時,默認都會先訪問父類無參構造方法
- 因為子類會繼承父類中的數據,可能還會使用父類中的數據。所以子類初始化之前,一定要先完成父類數據的初始化
- 每一個子類構造方法的第一條語句默認都是super()
- 若使用父類帶參構造方法進行數據初始化,即super()
- 若父類中沒有無參構造方法,只有帶參構造方法
- 用super關鍵字去顯示的調用父類帶參構造方法
- 在父類中自己提供一個無參構造方法
-
方法重寫
-
子類出現了和父類中一模一樣的方法聲明
-
應用
-
當子類需要父類的功能,而功能的主體子類又自己特有的內容時,可重寫父類中的方法,這樣即沿襲了父類的功能,又定義了子類特有的內容。
-
重寫的方法中,可擅用super關鍵字沿襲父類的(基礎)功能
-
課用@Override檢測重寫方法是否有誤
-
注意事項
-
父類中的private方法無法被子類繼承,則無法被重寫
-
子類方法訪問許可權不能更低
(public>默認>protected>private)
-
-
-
Java繼承的注意事項
- 一個子類只能單繼承,不支援多繼承
- 可實現多層繼承
-
多態
-
在Java中主要有兩種體現形式:
- 方法的重載與覆寫(重寫)
- 對象的多態性
-
成員訪問特點:(為何兩種不一樣:成員方法有重寫)
- 成員變數:編譯與執行均看左邊
- 成員方法:編譯看左邊,執行看右邊
-
優弊
-
優勢:提高了程式的擴展性
具體體現:定義方法的時候,使用父類型作為參數,將來在使用的時候,使用具體的子類型參與操作
-
弊端:不能使用子類的特有功能
-
-
轉型(實現使用子類特有功能)
-
向上轉型:從子到父,父類引用指向對象
-
向下轉型:從父到子,父類引用轉為子類對象
用強制類型轉換實現執行子類特有方法(不佔用新的堆記憶體)
-
抽象類
-
概述:
在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象方法
-
特點
-
抽象類和抽象方法必須用abstract關鍵字修飾
-
抽象類中不一定有抽象方法,由抽象方法的類一定時抽象類
-
抽象類不能直接實例化
如何實例化:參照多態的方法,通過子類對象實例化,這叫做抽象類多態
-
抽象類的子類
要麼重寫抽象類中的所有抽象方法
要麼本身就是抽象類
-
-
抽象類成員特點
-
成員變數:變數/常量
-
構造方法:
不可直接實例化。
用於子類訪問父類數據的初始化 -
成員方法:
可以有抽象方法:限定子類必須完成某些動作
也可以有非抽象方法:提高程式碼的復用性
-
-
抽象類名作為形參和返回值
- 方法的形參時抽象類名,其實需要的時該抽象類的子類對象
- 方法的返回值是抽象類名,其實返回的是該抽象類的子類對象
介面
-
Java中的介面更多的體現在對行為的抽象
-
聲明介面關鍵字:interface
public interface <介面名>;
調用介面關鍵字:implements
public class A implements <介面名>;
介面是abstract的,亦不可直接實例化
-
介面多態
- 多態的形式:具體類多態,抽象類多態,介面多態
- 多態的前提:
- 有繼承或者實現關係;
- 有方法的重寫/覆寫
- 有父類/父介面引用指向子/實現類對象
-
成員特點
- 成員變數:默認被public static final修飾
-
構造方法
介面無構造方法,因為介面主要是行為進行抽象的
一個類如果無父類,默認繼承自Object類
-
類和介面的關係
一個類或介面可以implements多個介面
-
抽象類和介面的關係
-
成員區別
抽象類 變數,常量;有構造方法;有抽象方法也有非抽象方法 介面 常量;抽象方法 2.關係區別
類與類 只能extends一個父類 類與介面 可以implements多個介面 介面與介面 同上 3.設計理念區別
抽象類 對象抽象(屬性,行為) 介面 主要對行為抽象
-
-
介面名作為形參和返回值
- 方法的形參是介面名,其實需要的是該介面的實現類對象
- 方法的返回值是介面名,其實返回的是該介面的實現類對象
內部類
-
訪問特點
- 內部類可直接訪問外部類的成員,包括private
- 外部類要訪問內部類成員,必須創建對象調用
-
成員內部類
-
當內部類許可權為public時:
外界使用內部類格式(外部類名.內部類名):
例:Outer.Inner oi = new Outer().new Inner();
-
當內部類許可權為private時:
類似於構建getAge和setAge方法。
-
-
局部內部類
-
定義在方法內,外界無法直接訪問,需要在方法內部創建對象並使用
-
該類可直接訪問外部類的成員,也可訪問方法內的局部變數
-
匿名內部類
-
前提:存在一個類或介面,類可以時具體類也可抽象類
-
格式:
new 類名或介面名() { 重寫方法; }
-
本質:
是一個繼承了該類或實現了該介面的子類匿名對象
-
用例:
-
-