朋友面試被問到 靜態建構函式

2022-02-12 22:25:58 字數 1873 閱讀 4463

事情是這樣的

朋友是乙個一年多經驗的.net開發人員

在面試新公司的時候,被面試官問到什麼是"靜態建構函式"

朋友回來告訴我,

"建構函式還有靜態的嗎,看來這次面試要黃了"

"對的,建構函式是有靜態的啊,不過也難怪,很少人會用到,看來面試官是要看你的基礎有多深啊!"

我們知道,所有的靜態成員,包括靜態欄位和靜態方法,當程式執行遇到這些靜態成員所在的類

在建立物件或者呼叫靜態成員的時候,所有的靜態成員會載入到記憶體的靜態儲存區,這個儲存區

與棧、堆分開,所以我們可以直接用

類名.靜態成員的方式對靜態成員進行訪問,不受物件控制.

同理.靜態建構函式也是當程式執行到這個靜態建構函式所在的類在建立物件或者呼叫靜態成員的時候,這個靜態建構函式就被"執行"

1

//宣告乙個person類

2class

person38

public

person()

912 }

呼叫main()方法

1

static

void main(string

args)

2

結果:

所以,靜態建構函式是先於任何建構函式執行的

靜態構造 函式不允許有訪問修飾符如:public 

那麼,我們可以利用靜態建構函式做什麼呢?

1

//宣告乙個person類

2class

person

3

12static

void

sayhi()

1316 }

這裡,將方法和字段私有化,外部不能直接用類名.出來,所以很好的利用的靜態建構函式的作用   (雖然也可以封裝成乙個公共方法來訪問)

還是呼叫上面的main()函式

由於涉及設計模式,這裡只介紹靜態建構函式所發揮的作用,讀者有興趣可以自行查閱相關資料了解單例模式

1

//宣告乙個person類

2class

person312

private

person()

13

16 }

1

static

void main(string

args)

2

結果:

①把預設的建構函式私有化private,因此外部不能再new出乙個物件,若要建立物件,只能由自己建立自己

②為了觸發靜態建構函式來建立物件. 外部呼叫了乙個靜態字段,由此靜態建構函式被觸發

③由於靜態建構函式只能被發動一次,所以建立的物件也只有乙個

最後,如果我們要在外部訪問這個被靜態建構函式初始化的物件,那麼我們可以在person類中加入這個方法

1

public

static

person getinstance()

2

其實靜態建構函式的用途並不廣,我們不能為了用它而用它,

使用static之前要考慮清楚,因為它會提前占用系統資源,

雖說這裡將靜態建構函式,大家覺得可能對業務沒什麼幫助,的確

但是,我們更要做一名專業的程式設計師\軟體工程師  起碼被問到也可以自信地回答

朋友面試被問到 靜態建構函式

原文 朋友面試被問到 靜態建構函式 事情是這樣的 朋友是乙個一年多經驗的.net開發人員 在面試新公司的時候,被面試官問到什麼是 靜態建構函式 朋友回來告訴我,建構函式還有靜態的嗎,看來這次面試要黃了 對的,建構函式是有靜態的啊,不過也難怪,很少人會用到,看來面試官是要看你的基礎有多深啊 我們知道,...

面試被問到webpack配置

當時太悲劇了,這一塊太久沒注意,一直都是做專案寫業務頁面比較多,竟然忘記了,還亂答一通,還說要配置vue loader 引入path 引入需要應用的函式,時候真想ps自己。webpack配置 在pakage.json裡配置執行命令,然 口和出口是基本的。答出以上三點基本得分 首先,安裝webpack...

面試hadoop可能被問到的問題

1 hadoop執行的原理?2 mapreduce的原理?3 hdfs儲存的機制?4 舉乙個簡單的例子說明mapreduce是怎麼來執行的 5 面試的人給你出一些問題,讓你用mapreduce來實現?比如 現在有10個資料夾,每個資料夾都有1000000個url.現在讓你找出top1000000ur...