static習題練習

2021-10-05 19:52:05 字數 2926 閱讀 4261

static習題練習

static關鍵字

概述:不依賴於任何物件就可以直接訪問

static關鍵字可以修飾成員變數和成員方法

static修飾成員變數

static修飾的成員變數是乙個共享資源,被所有物件共享,在類初次載入的時候才會初始化

static修飾的成員變數的生存期和類物件的生存期完全不同,而是和類的生存期相同,即:static成員變數在類物件建立之前可以使用,類物件銷毀之後依然可以使用,所以static修飾的成員變數和類物件無關。

static修飾成員方法

static修飾的成員方法不依賴於任何物件就可以直接訪問

主要作用:工具類(靜態成員方法使用的資料都是外來資料,且靜態成員方法可以擺脫類物件約束,通過類名直接呼叫。)

優點:1、節約記憶體,簡化邏輯。(不需要建立物件,不需要申請物件空間,也不需要銷毀物件空間。)

2、復用度更高。(擺脫物件限制,更加自由)

注意事項

1、靜態成員變數具有資料共享性,不管通過那種方式修改,都會影響所有人

2、static修飾的成員變數和成員方法,從屬於類,普通變數和方法從屬於物件

3、靜態成員變數與靜態成員方法推薦使用類名直接呼叫

4、static修飾的成員變數的生存期和類物件的生存期完全不同,而是和類的生存期相同

5、靜態成員方法中不能夠使用類內非靜態成員變數與非靜態成員方法 ,但是在非靜態成員方法中,可以使用靜態成員變數與靜態成員方法。

6、靜態成員方法可以使用類內的其他靜態成員變數和靜態成員方法

7、不能在static修飾的靜態內容中,使用this關鍵字

eg:

class

person

public

person

(string name)

public

void

test()

public

static

void

test2()

// getter與setter方法

public string getname()

public

void

setname

(string name)

}public

class

demo

}

執行結果:

country: china

name: 張三 country: china

非靜態成員方法

靜態成員方法

構造**塊與靜態**塊

構造**塊:

功能:初始化當前類所有的類物件,只要【使用new + 構造方法建立當前類物件】,就一定會執行構造**塊中的內容

格式:在class大括號以內,成員變數之後,構造方法之前

// 構造**塊

static

public

demo()

public

static

void

main

(string[

] args)

}執行結果:

構造**塊

構造方法

構造**塊

構造方法

靜態**塊

構造**塊

構造方法

分析:

1、找到main方法程式入口,在執行main方法之前應該先載入demo類,

2、載入demo類時,按照基本順序結構(從上至下,從左至右),先執行靜態成員變數demo1初始化,又由於構造**塊只要【使用new + 構造方法建立當前類物件】,就一定會執行構造**塊中的內容,所以先輸出構造**塊,再輸出構造方法

3、靜態成員變數demo2同理,輸出先輸出構造**塊,再輸出構造方法

4、然後發現靜態**塊,執行靜態**塊中的內容,輸出靜態**塊

5、執行main方法,採用無引數構造方法對demo類物件demo1進行初始化,先輸出構造**塊,在輸出構造方法。

eg2:

class

demo

static

public

demo()

public

static

void

main

(string[

] args)}/*

**執行效果已經num1和num2的值是多少

*/

分析:

1、找到main方法程式入口,在執行main方法之前應該先載入demo類,

2、載入demo類時,按照基本順序結構(從上至下,從左至右),先執行靜態成員變數,此時num1 = 10, num2 = 20.

3、然後發現靜態**塊,執行靜態**塊中的內容,此時num1 = 20, num2 = 100.

4、執行main方法,採用無引數構造方法對匿名物件進行初始化,先輸出構造**塊,再輸出構造方法。

eg3:

class

demo

static

public

demo()

public

static

void

main

(string[

] args)}/*

問: **執行流程!!!

*/

分析:

1、找到main方法程式入口,在執行main方法之前應該先載入demo類,

2、載入demo類時,按照基本順序結構(從上至下,從左至右),先執行靜態**塊,輸出靜態**塊.

3、然後在main方法中對demo類物件demo1進行例項化,將非靜態成員變數載入到demo類物件demo1指向的堆空間中,由於該成員變數為demo類自身物件的例項化,形成了閉環,則會出現無限遞迴現象造成堆疊溢位錯誤。

String 習題練習

1 將乙個字串進行反轉。將字串中指定部分進行反轉。abcdefghijk。cdefgh。public class stringtest1 public static string reversestring string str,int start,int end 過載,定義乙個反轉全部字串的方法 ...

2019 02 16 習題練習

報數問題 有n個人圍成一圈,順序排號。從第乙個人開始報數 從1到3報數 凡報到3的人退出圈子,問最後留下的是原來第幾號的那位 方法1 number int input input the people number person list list range 1,number 1 position...

C 習題練習。

當前版本 v1.0.0 完成日期 2019.3.29 函式名稱 count one bits 函式功能 返回引數二進位制中 1 的個數 入口引數 n 出口引數 空 返回型別 void int count one bits unsigned int n n 1 return count 當前版本 v1...