Java自學小白——面向物件進階課程學習1
阿新 • • 發佈:2022-03-22
這是我的第一篇隨筆(是文章嗎?)主要是為了複習一節課程中學習的知識,可以說是知識總結,手寫的筆記侷限太多,現在選擇使用部落格來記錄每天的學習成果。
今天是學習Java的第22天(但是寫的是前幾天的學習成果),因為還要上課進度就沒有很快,每天想著能學多少學多少,希望可以儘快學完。
面向物件進階課程——static靜態變數、繼承
一、static關鍵字
- static是靜態的意思,可以修飾成員變數和方法
1.Static修飾成員變數
-
static修飾成員變量表示該成員變數在記憶體中只儲存一份,可以被共享訪問、修改。
- 示例:
-
1 public class User { 2 public
這便是static修飾成員變數的一種形式。
(有沒有大佬指導下程式碼插入啊?是不是隻能是這樣的樣式,看程式碼的話需要花費一點時間。)
- 成員變數可以分為兩類:
- 靜態成員變數(有static修飾,是屬於類下的,記憶體中只加載一次)
- 訪問格式:類名.靜態變數成員 例:
- 還有第二種訪問格式:物件.靜態成員變數(不推薦)
-
例項成員變數(無static修飾,存在於每個物件中)
-
訪問格式:物件.例項成員變數
-
- 兩種成員變數在什麼情況下定義?
- 靜態成員變數:表示線上人數等需要被共享的資訊。
- 例項成員變數:屬於每個物件,且每個物件資訊不同時
- 靜態成員變數(有static修飾,是屬於類下的,記憶體中只加載一次)
- static修飾成員變數的記憶體原理
-
建立的物件訪問Static修飾的成員變數都是記憶體中的同一個地址
-
2.static修飾成員方法的基本用法
- 成員方法的分類
- 靜態成員方法(有static修飾,屬於類下)
- 訪問格式:類.靜態成員方法
- 例項成員方法(無static修飾,屬於物件下)
- 訪問格式:物件.例項成員方法
- 注:如果是以執行一個通用功能為目的,或需要方便訪問,可以申明成靜態方法
- 靜態成員方法(有static修飾,屬於類下)
- 案例練習:
- 員工類程式碼如下(還沒有寫註釋的習慣,這個要改)
-
主函式如下:
- 修飾成員方法的記憶體原理
3.static的實際應用案例
- 工具類 :工具類中定義一些靜態方法,每個方法都是以完成一個共用的功能為目的。
- 注意:1.建議工具類的構造器私有化處理 2.工具類不需要建立物件(直接用類名訪問即可)
- 使用場景:
-
好處:1.內部都是靜態方法,每個方法完成一個功能(呼叫方便) 2.一次編寫,處處可用(提高程式碼複用性)
- 案例:
-
程式碼:
1 public class ArrayUtils { 2 3 private ArrayUtils() { 4 5 } 6 7 public static String toString(int[] arr){ 8 String pri = "["; 9 int j = 0; 10 for (int i = 0; i < arr.length; i++) { 11 j = arr[i]; 12 if(i == arr.length-1){ 13 pri += j ; 14 }else{ 15 pri += j + "," ; 16 } 17 } 18 pri += "]"; 19 return pri ; 20 } 21 22 public static double getAverage(double[]arr1){ 23 double max =arr1[0]; 24 double min =arr1[0]; 25 double j = 0.0; 26 double sum = arr1[0]; 27 for (int i = 1; i < arr1.length; i++) { 28 sum += arr1[i]; 29 j = arr1[i]; 30 if(max > j){ 31 max = j ; 32 } 33 if (min < j){ 34 min =j; 35 } 36 } 37 sum = (sum -max -min)/ (arr1.length-2); 38 return sum ; 39 } 40 41 42 }
-
主函式:(經典不寫註釋)
4.static訪問的注意事項
- 靜態方法只能訪問靜態的成員,不可以直接訪問例項成員
- 例項方法可以訪問靜態的成員,也可以訪問例項成員
- 靜態方法中是不可以出現this關鍵字的
二、static應用知識
1.程式碼塊
- 程式碼塊是類的五大成分之一(成員變數、構造器、方法、程式碼塊、內部類),定義在類中方法外
- 在Java類下,使用 {} 括起來的程式碼被稱為程式碼塊
-
案例:
-
(程式碼不見了,有時間重新敲一遍補上)
-
靜態程式碼塊的作用
-
在啟動系統時對資料進行初始化,程式碼優雅
-
2.單例設計模式
-
單例模式
-
可以保證系統中,應用該模式的這個類永遠都只有一個例項,即一個類永遠只能建立一個物件(例如工作管理員)
-
- 餓漢單例設計模式
- 在獲取物件前,物件已經為你提前建立好了。
- 設計步驟:
- 定義一個類,把構造器私有
- 定義一個靜態變數儲存一個物件
- 懶漢設計模式
- 在真正需要一個物件的時候,才去建立一個物件(延遲載入物件)。
- 設計步驟 :
- 定義一個類,把構造器私有。
- 定義一個靜態變數儲存一個物件。
- 提供一個返回單例物件的方法
二、繼承
- 什麼是繼承
- Java中提供一個關鍵字extends使一個類和另一個類建立起父子關係
-
繼承的格式
- 子類 extends 父類 例:public class Student extends People {}
- Student 稱為子類(派生類),People 稱為父類(基類或超類)。
-
使用繼承的好處
- 子類繼承父類後,就可以直接使用父類的公共的屬性和方法了。
- 繼承後子類的特點
- 子類繼承父類,子類可以得到父類的屬性和行為,子類可以使用
- Java中子類更加強大
- 繼承設計規範
- 子類們相同特徵(共性屬性,共性方法)放在父類中定義,子類獨有的屬性和行為應定義在子類自己裡面。
-
- 案例
-
父類:
-
-
學生子類:
-
-
教師子類:
-
-
main方法:
-
-
執行結果:
-
- 執行記憶體原理:
-
- 物件是子類的物件,子類的物件中會開闢父類空間和子類空間。父類的成員會在父類空間儲存。子類的成員會在子類空間儲存,但用的都是同一個子類物件的地址
- 繼承的特點
- 子類可以繼承父類的屬性和行為,但是子類不能繼承父類構造器
- 子類可以繼承父類的私有成員,但是不能直接訪問(有爭議)
- 子類可以直接用子類名訪問父類私有靜態成員,但這並不是繼承,只是共享地去訪問父類靜態成員
- Java是單繼承模式,一個類只能繼承一個父類
- Java不支援多繼承,但是支援多層繼承
- Java中所有的類都是Object類的子類
- 繼承後子類方法中訪問成員(成員變數、成員方法)的特點:
- 如果子父類中出現了重名的成員,會優先使用子類的,此時如果一定要在子類中使用父類,應:
- 方法重寫
- 在繼承體系中,如果子類出現和父類一模一樣的方法宣告,則稱子類的方法是重寫的方法。
- @Override重寫註解
- 方法重寫的注意事項和要求
- 子類繼承父類後構造器的特點:
- 子類中所有的構造器預設都會先訪問父類的無參構造器,在執行自己的構造器
-
子類的構造器第一行預設是:super();不寫也會存在。
- 子類構造器訪問父類有參構造器
- 通過super(.......);手動呼叫父類有參構造器。
- 作用:通過呼叫父類有引數構造器來初始化繼承父類的資料。
- 通過super(.......);手動呼叫父類有參構造器。
- this與super的使用總結
- this和super的使用注意點: