學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
944
2022-05-29
文章目錄
零、本講學(xué)習(xí)目標(biāo)
1、掌握靜態(tài)變量的使用
2、掌握靜態(tài)方法的使用
3、掌握靜態(tài)代碼塊的使用
一、static關(guān)鍵字的用處
二、靜態(tài)變量
1、靜態(tài)變量的定義
2、靜態(tài)變量的內(nèi)存分配示意圖
3、靜態(tài)變量的訪問(wèn)
4、靜態(tài)變量案例演示
5、使用static關(guān)鍵字注意事項(xiàng)
三、靜態(tài)方法
1、靜態(tài)方法的定義
2、靜態(tài)方法的訪問(wèn)
3、靜態(tài)方法案例演示
4、靜態(tài)方法注意事項(xiàng)
四、靜態(tài)代碼塊
1、靜態(tài)代碼塊的定義
2、靜態(tài)代碼塊執(zhí)行情況
3、靜態(tài)代碼塊的作用
4、靜態(tài)代碼塊案例演示
五、了解Math類的靜態(tài)成員
六、課后作業(yè)
1、創(chuàng)建Circle類
2、創(chuàng)建TestCircle類
相信大家對(duì)static關(guān)鍵字并不陌生,回顧一下我們?cè)诘谝淮握n創(chuàng)建的第一個(gè)Java程序HelloWorld.java:
主方法的修飾符里就有static,為什么主方法必須有static修飾符呢?通過(guò)本講的學(xué)習(xí),你會(huì)找到答案的。
零、本講學(xué)習(xí)目標(biāo)
1、掌握靜態(tài)變量的使用
2、掌握靜態(tài)方法的使用
3、掌握靜態(tài)代碼塊的使用
一、static關(guān)鍵字的用處
Java中的static關(guān)鍵字,用于修飾類的成員,如成員變量、成員方法以及代碼塊等,被static修飾的成員具備一些特殊性。比如被static關(guān)鍵字修飾的成員變量、方法可以被類直接訪問(wèn),而不需要預(yù)先構(gòu)造類的實(shí)例化對(duì)象。
二、靜態(tài)變量
1、靜態(tài)變量的定義
原因:在定義一個(gè)類時(shí),只是在描述某類事物的特征和行為,并沒(méi)有產(chǎn)生具體的數(shù)據(jù)。只有通過(guò)new關(guān)鍵字創(chuàng)建該類的實(shí)例對(duì)象后,系統(tǒng)才會(huì)為每個(gè)對(duì)象分配內(nèi)存空間,存儲(chǔ)各自的數(shù)據(jù)。有時(shí)候,開發(fā)人員希望某些特定的數(shù)據(jù)在內(nèi)存里只有一份,而且能被一個(gè)類的所有實(shí)例對(duì)象所共享。例如某個(gè)學(xué)校所有學(xué)生共享同一個(gè)學(xué)校名稱,此時(shí)完全不必在每個(gè)學(xué)生對(duì)象所占用的內(nèi)存空間中都聲明一個(gè)變量來(lái)表示學(xué)校名稱,而可以在對(duì)象以外的空間聲明一個(gè)表示學(xué)校名稱的變量讓所有對(duì)象來(lái)共享。這種能被類的所有對(duì)象共享的變量就是靜態(tài)變量。
定義:在一個(gè)Java類中,可以使用static關(guān)鍵字來(lái)修飾成員變量,該變量被稱作靜態(tài)變量。
2、靜態(tài)變量的內(nèi)存分配示意圖
從圖可以看出,所有學(xué)生對(duì)象共享一個(gè)名稱為schoolName的變量。在一個(gè)Java類中,要實(shí)現(xiàn)這種功能可以使用static關(guān)鍵字來(lái)修飾成員變量,該變量被稱作靜態(tài)變量,它可以被所有實(shí)例所共享。
3、靜態(tài)變量的訪問(wèn)
通過(guò)類名訪問(wèn):靜態(tài)變量被所有實(shí)例共享,可以使用“類名.變量名”的形式來(lái)訪問(wèn)。
通過(guò)對(duì)象名訪問(wèn):靜態(tài)變量也可以“對(duì)象名.變量名”的形式來(lái)訪問(wèn),當(dāng)然同一個(gè)類的不同對(duì)象訪問(wèn)的靜態(tài)變量值都是相同的。
4、靜態(tài)變量案例演示
創(chuàng)建Student類,包含實(shí)例變量name和age、靜態(tài)變量schoolName
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
創(chuàng)建TestStudent類,創(chuàng)建對(duì)象,設(shè)置屬性,調(diào)用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
運(yùn)行程序,查看結(jié)果:
由于schoolName是靜態(tài)變量,既可以通過(guò)Student.schoolName的方式進(jìn)行調(diào)用,也可以通過(guò)Student的實(shí)例對(duì)象進(jìn)行調(diào)用,比如stu1.schoolName和stu2.schoolName。第11行代碼將變量schoolName賦值為“瀘州職業(yè)技術(shù)學(xué)院”后,兩個(gè)學(xué)生對(duì)象stu1和stu2的schoolName屬性值均為“瀘州職業(yè)技術(shù)學(xué)院”。
5、使用static關(guān)鍵字注意事項(xiàng)
注意,static關(guān)鍵字只能用于修飾成員變量,不能用于修飾局部變量,否則編譯會(huì)報(bào)錯(cuò)。
三、靜態(tài)方法
普通成員方法也叫實(shí)例方法,表明只有在實(shí)例化對(duì)象之后才能調(diào)用,如果想不創(chuàng)建對(duì)象就能調(diào)用某個(gè)方法,那么此時(shí)可以考慮使用靜態(tài)方法。
1、靜態(tài)方法的定義
在一個(gè)類中,被static關(guān)鍵字修飾的方法稱為靜態(tài)方法。
2、靜態(tài)方法的訪問(wèn)
方法一、通過(guò)類名來(lái)訪問(wèn):類名.方法
方法二、通過(guò)對(duì)象名來(lái)訪問(wèn):對(duì)象名.方法
3、靜態(tài)方法案例演示
在Student類定義靜態(tài)方法
創(chuàng)建Example1202類,通過(guò)兩種方式調(diào)用靜態(tài)方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
運(yùn)行程序,查看結(jié)果
4、靜態(tài)方法注意事項(xiàng)
在一個(gè)靜態(tài)方法中只能訪問(wèn)用static修飾的成員,原因是沒(méi)有被static修飾的成員需要先創(chuàng)建對(duì)象才能訪問(wèn),而靜態(tài)方法在被調(diào)用時(shí)可以不創(chuàng)建任何對(duì)象。
四、靜態(tài)代碼塊
1、靜態(tài)代碼塊的定義
在Java中,使用一對(duì)大括號(hào)包圍起來(lái)的若干行代碼被稱為一個(gè)代碼塊。
在Java中,使用static關(guān)鍵字修飾的代碼塊稱為靜態(tài)代碼塊。
2、靜態(tài)代碼塊執(zhí)行情況
當(dāng)類被加載時(shí),靜態(tài)代碼塊會(huì)執(zhí)行,并且只會(huì)執(zhí)行一次。
3、靜態(tài)代碼塊的作用
在程序中,經(jīng)常使用靜態(tài)代碼塊來(lái)對(duì)類的成員變量進(jìn)行初始化。
4、靜態(tài)代碼塊案例演示
創(chuàng)建Person類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
創(chuàng)建測(cè)試類Example1203
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
運(yùn)行程序,查看結(jié)果
在主方法中創(chuàng)建了兩個(gè)Person對(duì)象,但在兩次實(shí)例化對(duì)象的過(guò)程中,靜態(tài)代碼塊中的內(nèi)容只輸出了一次,這就說(shuō)明靜態(tài)代碼塊在類第一次使用時(shí)才會(huì)被加載,并且只會(huì)加載一次。
五、了解Math類的靜態(tài)成員
上述案例,我們輸出了Math的靜態(tài)屬性E和PI,調(diào)用了Math的靜態(tài)方法sqrt()。
如何能查看一個(gè)類的源碼呢?很簡(jiǎn)單,將鼠標(biāo)移到該類上,左手按著Ctrl鍵,同時(shí)點(diǎn)擊鼠標(biāo)左鍵,即可打開該類的源碼文件進(jìn)行查看。
查看Math.java文件內(nèi)容
摘錄Math類部分源碼
package java.lang; import java.util.Random; import sun.misc.FloatConsts; import sun.misc.DoubleConsts; /** * @author unascribed * @author Joseph D. Darcy * @since JDK1.0 */ public final class Math { /** * Don't let anyone instantiate this class. */ private Math() {} /** * The {@code double} value that is closer than any other to * e, the base of the natural logarithms. */ public static final double E = 2.7182818284590452354; /** * The {@code double} value that is closer than any other to * pi, the ratio of the circumference of a circle to its * diameter. */ public static final double PI = 3.14159265358979323846; /** * Returns the trigonometric sine of an angle. Special cases: *
The computed result must be within 1 ulp of the exact result. * Results must be semi-monotonic. * * @param a an angle, in radians. * @return the sine of the argument. */ public static double sin(double a) { return StrictMath.sin(a); // default impl. delegates to StrictMath } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Math.java文件有2370行
查看Math類的結(jié)構(gòu)
六、課后作業(yè)
1、創(chuàng)建Circle類
定義雙精度靜態(tài)變量r
定義雙精度靜態(tài)常量PI = 3.1414926
定義訪問(wèn)靜態(tài)變量r的靜態(tài)方法setR()與getR()
定義獲取圓面積的靜態(tài)方法getArea()
2、創(chuàng)建TestCircle類
添加靜態(tài)代碼塊,輸出“計(jì)算圓面積”
在主方法里從鍵盤輸入圓半徑
調(diào)用Circle的靜態(tài)方法計(jì)算圓面積
輸出圓面積,保留兩位小數(shù)
Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。