Javase教程全集:static關(guān)鍵字作用

Javase教程全集:static關(guān)鍵字作用

天津卓眾教育      2022-05-03 19:42:01     97

Javase教程全集:static關(guān)鍵字作用,  靜態(tài)變量和靜態(tài)方法  static關(guān)鍵字最基本的用法是:  1、被static修飾的變量屬于類變量,可以通過類名.變量名直接引用,

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹


  靜態(tài)變量和靜態(tài)方法


  static關(guān)鍵字最基本的用法是:


  1、被static修飾的變量屬于類變量,可以通過類名.變量名直接引用,而不需要new出一個類來


  2、被static修飾的方法屬于類方法,可以通過類名.方法名直接引用,而不需要new出一個類來


  被static修飾的變量、被static修飾的方法統(tǒng)一屬于類的靜態(tài)資源,是類實例之間共享的,換言之,一處變、處處變。JDK把不同的靜態(tài)資源放在了不同的類中而不把所有靜態(tài)資源放在一個類里面,很多人可能想當(dāng)然認(rèn)為當(dāng)然要這么做,但是是否想過為什么要這么做呢?個人認(rèn)為主要有三個好處:


  1、不同的類有自己的靜態(tài)資源,這可以實現(xiàn)靜態(tài)資源分類。比如和數(shù)學(xué)相關(guān)的靜態(tài)資源放在java.lang.Math中,和日歷相關(guān)的靜態(tài)資源放在java.util.Calendar中,這樣就很清晰了


  2、避免重名。不同的類之間有重名的靜態(tài)變量名、靜態(tài)方法名也是很正常的,如果所有的都放在一起不可避免的一個問題就是名字重復(fù),這時候怎么辦?分類放置就好了。


  3、避免靜態(tài)資源類無限膨脹,這很好理解。


  OK,再微微深入一下,也是有些人容易混淆的一個問題:靜態(tài)方法能不能引用非靜態(tài)資源?靜態(tài)方法里面能不能引用靜態(tài)資源?非靜態(tài)方法里面能不能引用靜態(tài)資源?比如就以這段代碼為例,是否有錯?



  當(dāng)然有錯,在第7行的地方。不妨這么思考這個問題:


  靜態(tài)資源屬于類,但是是獨立于類存在的。從JVM的類加載機制的角度講,靜態(tài)資源是類初始化的時候加載的,而非靜態(tài)資源是類new的時候加載的。類的初始化早于類的new,比如Class.forName(“xxx”)方法,就是初始化了一個類,但是并沒有new它,只是加載這個類的靜態(tài)資源罷了。所以對于靜態(tài)資源來說,它是不可能知道一個類中有哪些非靜態(tài)資源的;但是對于非靜態(tài)資源來說就不一樣了,由于它是new出來之后產(chǎn)生的,因此屬于類的這些東西它都能認(rèn)識。所以上面的幾個問題答案就很明確了:


  1、靜態(tài)方法能不能引用非靜態(tài)資源?不能,new的時候才會產(chǎn)生的東西,對于初始化后就存在的靜態(tài)資源來說,根本不認(rèn)識它。


  2、靜態(tài)方法里面能不能引用靜態(tài)資源?可以,因為都是類初始化的時候加載的,大家相互都認(rèn)識。


  3、非靜態(tài)方法里面能不能引用靜態(tài)資源?可以,非靜態(tài)方法就是實例方法,那是new之后才產(chǎn)生的,那么屬于類的內(nèi)容它都認(rèn)識。


  靜態(tài)塊


  靜態(tài)塊也是static的重要應(yīng)用之一。也是用于初始化一個類的時候做操作用的,和靜態(tài)變量、靜態(tài)方法一樣,靜態(tài)塊里面的代碼只執(zhí)行一次,且只在初始化類的時候執(zhí)行。靜態(tài)塊很簡單,不過提三個小細(xì)節(jié):



  打印結(jié)果是:



  得出第一個結(jié)論:靜態(tài)資源的加載順序是嚴(yán)格按照靜態(tài)資源的定義順序來加載的。這和周志明老師《深入理解Java虛擬機:JVM高級特性與最佳實踐》中類初始化中的說法“<clinit>()方法是由編譯器自動收集類中所有類變量的賦值動作和靜態(tài)語句塊(static{}塊)中的語句合并產(chǎn)生的,編譯器收集的順序是由語句在源文件中出現(xiàn)的順序所決定的”是一致的。


      以上就是天津卓眾教育Java培訓(xùn)機構(gòu)小編介紹的“Javase教程全集:static關(guān)鍵字作用”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。