您好,登錄后才能下訂單哦!
這篇文章主要講解了如何使用java關(guān)鍵字static,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
class Test { // public 修飾符 public int a; // private 修飾符 private int b; // 沒(méi)有修飾符 int c; // static 修飾符 public static int d; }
class Test { public int a; public String b; public double c; public static int d; } Test t = new Test();
以上述簡(jiǎn)單的測(cè)試類為例,畫其底層的內(nèi)存圖(下圖是我自己手畫的圖,天生手殘,請(qǐng)大家多擔(dān)待😂):
以上就是很簡(jiǎn)單的Java實(shí)例化對(duì)象從創(chuàng)建內(nèi)存到給成員變量開辟內(nèi)存空間,并默認(rèn)初始化的底層內(nèi)存圖,我來(lái)解釋以下上面的圖:
class Test { public int a = 10; public static int b = 20; } // 類已經(jīng)加載,并沒(méi)有實(shí)例化,此時(shí)靜態(tài)區(qū)已經(jīng)開辟,可以調(diào)用使用靜態(tài)變量,并不依賴于對(duì)象存在,而是依賴于類的存在,使用時(shí),直接類名.變量名,即可。 syso(Test.b); // 輸出 20 // 實(shí)例化對(duì)象,此時(shí)才在堆空間中開辟一系列的內(nèi)存,上述原理中已經(jīng)闡述,此時(shí)才可以調(diào)用a的值。 Test t = new Test(); syso(t.a); // 輸出 10 // 當(dāng)然也可調(diào)用 b 的值 syso(t.b); // 輸出 20
用static修飾的成員變量是靜態(tài)變量,也稱類變量,它是隨著類的加載而加載的,地址內(nèi)存在靜態(tài)區(qū),不再依賴對(duì)象而存在。但是如何手動(dòng)改變或設(shè)置或調(diào)用它的值呢,即操作static數(shù)據(jù)成員?
public static int a = 10;
但是如何手動(dòng)的給它賦予值并且調(diào)用呢,這就引入了用static修飾的成員方法,類方法。
class Test { // 一般的類中的成員變量都是私有的 private static String lib; // static 只能訪問(wèn)靜態(tài)成員 和 靜態(tài)方法 public static String getLib() { // 普通數(shù)據(jù)成員,依賴對(duì)象 // 不依賴對(duì)象 // 不存在 this.lib; 不存在 this 引用 return lib; } // 局部變量 public static void setLib(String lib) { // 通過(guò)類名.static成員 解決同名的問(wèn)題 School.lib = lib; //static 不可以調(diào)用其它 非 static 的成員方法 } } // 在使用的時(shí)候,直接 類名.方法名 即可 // 如果要使用類,必須先把 .class 文件裝入內(nèi)存 當(dāng)裝入內(nèi)存后,類立馬開辟內(nèi)存在方法區(qū),形成類的對(duì)象 // 類成員 調(diào)用方法 // 類名 .成員名 School.setLib("1"); System.out.println("lib: " + School.getLib());
在Java中的代碼塊,有局部代碼塊,構(gòu)造代碼塊,靜態(tài)代碼塊,三者執(zhí)行順序,作用,會(huì)單獨(dú)出一篇博文來(lái)簡(jiǎn)單說(shuō)明。所謂靜態(tài)代碼塊就是用static修飾的代碼塊。
class Test { // 靜態(tài)代碼塊 static { syso(...); } }
輸出:
可以明顯的看出,當(dāng)類加載還未執(zhí)行main函數(shù)的時(shí)候,主類中的static已經(jīng)執(zhí)行,之后執(zhí)行main函數(shù),從上至下順序執(zhí)行,當(dāng)類進(jìn)行實(shí)例化的時(shí)候,同樣也是現(xiàn)執(zhí)行類中的static代碼塊,再執(zhí)行構(gòu)造器中的代碼塊
1.靜態(tài)方法 | 靜態(tài)成員變量:
類中的方法 | 成員變量,加上static修飾,就成了靜態(tài)成員方法(類方法) | 靜態(tài)成員變量(類變量)
2.static成員方法和普通成員方法的本質(zhì)區(qū)別在于沒(méi)有this指針
static成員方法只能引用類中的靜態(tài)成員(屬性、方法)
static成員方法不能引用類中的非靜態(tài)成員
3.類變量和類方法,都是隨著類的加載而加載的,依賴于類,優(yōu)于對(duì)象的,使用的時(shí)候 類名.變量名(方法名),被類的所有對(duì)象而共享的
4.普通成員方法既可以引用static成員,也可以普通成員
5.可以通過(guò)類名調(diào)用static成員方法,也可以通過(guò)對(duì)象名調(diào)用
6.static方法之所以存在,就是為了操作static數(shù)據(jù)成員
看完上述內(nèi)容,是不是對(duì)如何使用java關(guān)鍵字static有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。