淺析java 的 static 關(guān)鍵字用法
本篇淺析java中static的用法,主要五個(gè)方面:靜態(tài)成員變量,靜態(tài)方法,靜態(tài)塊,靜態(tài)內(nèi)部類,靜態(tài)導(dǎo)包。
首先還是一張表格說一下靜態(tài)對象和非靜態(tài)對象的區(qū)別:
靜態(tài)對象 | 非靜態(tài)對象 | |
歸屬 | 類共同具有 | 類的各個(gè)實(shí)例獨(dú)立擁有 |
內(nèi)存分配 | 內(nèi)存空間上固定的 | 附屬類分配 |
分配空間順序 | 優(yōu)先分配靜態(tài)對象空間 | 優(yōu)先分配靜態(tài)對象空間,初始化也一樣 |
1 靜態(tài)變量,靜態(tài)方法,靜態(tài)塊
靜態(tài)對象,靜態(tài)方法都是在原對象和方法上加上static關(guān)鍵字修飾,表示類可以直接調(diào)用這些,而不需要實(shí)例化后再調(diào)用。具有的好處是:
1--靜態(tài)對象的數(shù)據(jù)是全局唯一的,一改都改,可以保證數(shù)據(jù)的唯一性
2--引用方便,直接用類名.方法(屬性)就可以了,不用再get和set
當(dāng)然靜態(tài)方法(變量,塊)也有相應(yīng)的限制:
1--不能調(diào)用其他非靜態(tài)方法(只能調(diào)用static方法)
2--只能訪問static數(shù)據(jù)
3--不能以任何方式引用this或super
示例代碼:
public class StaticExercise { public static String sky="jeyson"; public static String getMySky(String sky){ return sky; } static { System.out.println("這是靜態(tài)塊中的內(nèi)容--"); System.out.println("靜態(tài)塊:"+getMySky(sky)); } /** * ***靜態(tài)對象好處: * 1--靜態(tài)對象的數(shù)據(jù)是全局唯一的,一改都改,可以保證數(shù)據(jù)唯一。 * 2--引用方便,直接類名.方法就行了,不用set和get * ***分配空間順序: * 先分配靜態(tài)對象空間再分配非靜態(tài)。初始化順序也是這樣 * ***static final 修飾的成員變量和成員方法可以理解為全局變量(java中沒有全局變量概念) * ***靜態(tài)對象,方法,塊的限制: * 1--只能調(diào)用其他的static方法 * 2--只能訪問static數(shù)據(jù) * 3--不能以任何方式引用this或super * 靜態(tài)對象測試 */ @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 靜態(tài)內(nèi)部類
當(dāng)一個(gè)類跟另一個(gè)類(外部類)有緊密的聯(lián)系,一般只有用到外部類的時(shí)候才會用該類的話,可以將該類作為靜態(tài)的內(nèi)部類。這樣就可以隨著類的加載而直接產(chǎn)生。不用再可以實(shí)例化。
使用方法:隨類一同被加載,調(diào)用直接外部類.內(nèi)部類.靜態(tài)對象(方法)
示例代碼:
class StaticTest{ public static String sms="to my sky"; public static String getSms(){ return sms; } /** * 靜態(tài)內(nèi)部類 * ***使用場景: * 內(nèi)部類跟外部類聯(lián)系緊密,一般只有用到外部類的時(shí)候才會用到這個(gè)類 * ***使用 * 隨類一同被加載,直接外部類.內(nèi)部類.靜態(tài)對象(方法) */ static class InnerStatic{ public static final String MYSKY="MY FINAL SKY"; } } @Test public void testStatic2(){ System.out.println(StaticTest.InnerStatic.MYSKY); }
2 靜態(tài)導(dǎo)包
如果要用的靜態(tài)方法所在的類跟當(dāng)前類不在同一個(gè)包下,可以使用靜態(tài)導(dǎo)包。這樣你想要用的靜態(tài)方法或變量就相當(dāng)于在該類中直接可見,無需再類名.靜態(tài)變量的方式調(diào)用。
使用方法:
import static 包名.類名.靜態(tài)成員變量(方法)
好處:
被導(dǎo)入的靜態(tài)變量和方法在該類中直接可見,直接用
壞處:
一定程度上降低了代碼的可讀性
代碼示例:
public class MyStaticImportTest { public static final int number=55; public static void getMyWords(){ System.out.println("hello ,這是一個(gè)靜態(tài)導(dǎo)包的測試"); } } import static com.generic.MyStaticImportTest.number; import static com.generic.MyStaticImportTest.getMyWords; /** * @Description: * 靜態(tài) */ public class StaticExercise { /** * 靜態(tài)導(dǎo)包 * ***使用方法: * 直接靜態(tài)導(dǎo)入相應(yīng)的變量和方法:(import static 包名.類名.靜態(tài)成員變量(方法) * import static com.generic.MyStaticImportTest.number; * import static com.generic.MyStaticImportTest.getMyWords; * *** 好處: * 被導(dǎo)入的靜態(tài)方法和變量在這個(gè)類中直接可見,無需再給出類名 * *** 壞處 * 一定程度上降低了代碼的可讀性 */ @Test public void testStatic3(){ //靜態(tài)導(dǎo)入后可以直接用 int myNumber=number; getMyWords(); } }
以上所述是小編給大家介紹的淺析java 的 static 關(guān)鍵字用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Spring遠(yuǎn)程加載配置的實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Spring遠(yuǎn)程加載配置的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03springboot使用redisRepository和redistemplate操作redis的過程解析
本文給大家介紹springboot整合redis/分別用redisRepository和redistemplate操作redis,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-05-05IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程
這篇文章主要介紹了IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Idea自動生成Entity實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Idea自動生成Entity實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09如何使用Collections.reverse對list集合進(jìn)行降序排序
這篇文章主要介紹了Java使用Collections.reverse對list集合進(jìn)行降序排序,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11SpringBoot打jar包遇到的xml文件丟失的解決方案
這篇文章主要介紹了SpringBoot打jar包遇到的xml文件丟失的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09