本篇淺析java中static的用法,主要五個方面:靜態成員變量,靜態方法,靜態塊,靜態內部類,靜態導包。
首先還是一張表格說一下靜態對象和非靜態對象的區別:
靜態對象 | 非靜態對象 | |
歸屬 | 類共同具有 | 類的各個實例獨立擁有 |
內存分配 | 內存空間上固定的 | 附屬類分配 |
分配空間順序 | 優先分配靜態對象空間 | 優先分配靜態對象空間,初始化也一樣 |
1 靜態變量,靜態方法,靜態塊
靜態對象,靜態方法都是在原對象和方法上加上static關鍵字修飾,表示類可以直接調用這些,而不需要實例化后再調用。具有的好處是:
1--靜態對象的數據是全局唯一的,一改都改,可以保證數據的唯一性
2--引用方便,直接用類名.方法(屬性)就可以了,不用再get和set
當然靜態方法(變量,塊)也有相應的限制:
1--不能調用其他非靜態方法(只能調用static方法)
2--只能訪問static數據
3--不能以任何方式引用this或super
示例代碼:
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
|
public class StaticExercise { public static String sky= "jeyson" ; public static String getMySky(String sky){ return sky; } static { System.out.println( "這是靜態塊中的內容--" ); System.out.println( "靜態塊:" +getMySky(sky)); } /** * ***靜態對象好處: * 1--靜態對象的數據是全局唯一的,一改都改,可以保證數據唯一。 * 2--引用方便,直接類名.方法就行了,不用set和get * ***分配空間順序: * 先分配靜態對象空間再分配非靜態。初始化順序也是這樣 * ***static final 修飾的成員變量和成員方法可以理解為全局變量(java中沒有全局變量概念) * ***靜態對象,方法,塊的限制: * 1--只能調用其他的static方法 * 2--只能訪問static數據 * 3--不能以任何方式引用this或super * 靜態對象測試 */ @Test public void testStatic1(){ System.out.println(sky); System.out.println( "-----------------" ); System.out.println(getMySky(sky)); System.out.println( "-----------------" ); System.out.println(StaticTest.getSms()); } } |
2 靜態內部類
當一個類跟另一個類(外部類)有緊密的聯系,一般只有用到外部類的時候才會用該類的話,可以將該類作為靜態的內部類。這樣就可以隨著類的加載而直接產生。不用再可以實例化。
使用方法:隨類一同被加載,調用直接外部類.內部類.靜態對象(方法)
示例代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class StaticTest{ public static String sms= "to my sky" ; public static String getSms(){ return sms; } /** * 靜態內部類 * ***使用場景: * 內部類跟外部類聯系緊密,一般只有用到外部類的時候才會用到這個類 * ***使用 * 隨類一同被加載,直接外部類.內部類.靜態對象(方法) */ static class InnerStatic{ public static final String MYSKY= "MY FINAL SKY" ; } } @Test public void testStatic2(){ System.out.println(StaticTest.InnerStatic.MYSKY); } |
2 靜態導包
如果要用的靜態方法所在的類跟當前類不在同一個包下,可以使用靜態導包。這樣你想要用的靜態方法或變量就相當于在該類中直接可見,無需再類名.靜態變量的方式調用。
使用方法:
import static 包名.類名.靜態成員變量(方法)
好處:
被導入的靜態變量和方法在該類中直接可見,直接用
壞處:
一定程度上降低了代碼的可讀性
代碼示例:
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
|
public class MyStaticImportTest { public static final int number= 55 ; public static void getMyWords(){ System.out.println( "hello ,這是一個靜態導包的測試" ); } } import static com.generic.MyStaticImportTest.number; import static com.generic.MyStaticImportTest.getMyWords; /** * @Description: * 靜態 */ public class StaticExercise { /** * 靜態導包 * ***使用方法: * 直接靜態導入相應的變量和方法:(import static 包名.類名.靜態成員變量(方法) * import static com.generic.MyStaticImportTest.number; * import static com.generic.MyStaticImportTest.getMyWords; * *** 好處: * 被導入的靜態方法和變量在這個類中直接可見,無需再給出類名 * *** 壞處 * 一定程度上降低了代碼的可讀性 */ @Test public void testStatic3(){ //靜態導入后可以直接用 int myNumber=number; getMyWords(); } } |
以上所述是小編給大家介紹的淺析java 的 static 關鍵字用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!