5/23

清荣峻茂發表於2024-05-23

1: 建構函式

建構函式,是一種特殊的方法。主要用來在建立物件時初始化物件,即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。特別的一個類可以有多個建構函式,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載

訪問修飾符 構造方法名 ( ) {
//初始化程式碼
}

主要特點
(1)建構函式的命名必須和類名完全相同。在java中普通函式可以和建構函式同名,但是必須帶有返回值;
(2)建構函式的功能主要用於在類的物件建立時定義初始化的狀態。它沒有返回值,也不能用void來修飾。這就保證了它不僅什麼也不用自動返回,而且根本不能有任何選擇。而其他方法都有返回值,即使是void返回值。儘管方法體本身不會自動返回什麼,但仍然可以讓它返回一些東西,而這些東西可能是不安全的;
(3)建構函式不能被直接呼叫,必須透過new運算子在建立物件時才會自動呼叫;而一般的方法是在程式執行到它的時候被呼叫的;
(4)當定義一個類的時候,通常情況下都會顯示該類的建構函式,並在函式中指定初始化的工作也可省略,不過Java編譯器會提供一個預設的建構函式。此預設建構函式是不帶引數的。而一般的方法不存在這一特點;
(5)建構函式有回滾的效果,建構函式丟擲異常時,構造的是一個不完整物件,會回滾,將此不完整物件的成員釋放(c++)
(6)當一個類只定義了私有的建構函式,將無法透過new關鍵字來建立其物件,當一個類沒有定義任何建構函式,C#編譯器會為其自動生成一個預設的無參的建構函式。
(7)在Python中建構函式必須透過重寫__init__方法實現

2: 建構函式的作用:就是給屬性進行賦值的:也叫物件的初始化,每一個類都會有一個預設的建構函式
建構函式:就是方法名和類名完全一致的函式他沒有返回值型別也沒有void,如果我們寫了建構函式,那麼預設的建構函式將不存在
不能夠被呼叫

3: 建構函式的過載:
過載:方法名與類名相同,但是引數不同,引數的型別不同和數量不同: 作用:就是同樣的方法實現不同的功能
建構函式的過載:方法名與類名相同,但是引數不同,引數的型別不同和數量不同,但是沒有返回值沒有void

4: static 關鍵字:靜態的
修飾屬性:全域性變數,優先被載入
修飾的方法被成為,靜態方法:不用物件也可以進行呼叫,可以透過型別.方法
修飾程式碼塊: 優先被載入,並且只載入一次
他不可以修飾區域性變數

static修飾的物件:
static關鍵字可以修飾:區域性變數、全域性變數、函式

static修飾後改變了什麼?
1.改變了生存週期;就是一個變數、函式從分配記憶體去表示到回收記憶體的過程
2.改變了作用域;就是可以在哪些檔案裡可以使用該函式

static修飾不同物件時的作用:
(1)區域性變數:
區域性變數就是在函式內定義的變數,普通的區域性變數,生存週期是隨著函式的結束而結束,每次函式重新執行,區域性變數都是新的值,不會保留上次的值。當用static修飾後,區域性變數的生存週期就是當程式結束才會結束。再次呼叫函式時,用static修飾的變數會保留上一次的值。
應用:在函式內,我們想保留某些變數上一次的值,就可以用static去修飾該變數。比如:想統計該函式被執行的次數時,就可以定義被static修飾的int型變數,沒執行一次該變數就++。
總結:用static修飾的區域性變數,改變了生存週期,但是沒有改變其作用域。改變其生存週期的原因是被static修飾的區域性變數被存放在.bss段或者.data段,而普通的區域性變數是存放在棧上的。

(2)全域性變數:
全域性變數用static修飾改變了作用域,沒有改變生存週期。普通的全域性變數是可以被其他的.c檔案引用的,一旦被static修飾,就只能被定義該全域性變數的.c檔案引用,使得該全域性變數的作用範圍減小。
作用:當一個全域性變數不想被其他.c檔案引用時,可以用static修飾,這樣其他的檔案就不能透過extern的方式去訪問,這樣主要是為了資料安全。
總結:改變其作用域,沒有改變生存週期。

(3)函式:
函式用static修飾,改變了作用域。普通的函式是可以透過標頭檔案聲名的方式被其他檔案呼叫,被static修飾後就只能在本檔案裡被呼叫,這樣是為了資料的安全。
作用:有些函式並不想對外提供,只需要在本檔案裡呼叫,這時候就可以用static去修飾。
總結:改變了作用域,沒有改變其生存週期。

補充:
用static修飾全域性變數和函式,除了上面說的資料安全,防止被誤引用,還有一個作用是解決重名問題。當用static修飾了全域性變數和函式後,其他檔案裡再定義同名的全域性變數和函式也是可以的。一般來說,如果不是要對外提供的函式和全域性變數,最好都用static修飾。

5: final 關鍵字:最終的:用final修飾的變數稱為 常量,其值固定不變

(1)final關鍵字在Java中被稱為完結器,表示最終的意思。
(2)final能宣告 類,方法,屬性:

使用final宣告的類不能被繼承
使用final宣告的方法不能被重寫
使用final宣告的變數變成常量,常量是不可以被修改的

相關文章