最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?static關鍵字詳細解析

 更新時間:2022年08月25日 10:35:33   作者:haoyuhua???????  
這篇文章主要介紹了Java?static關鍵字詳細解析,java中的static關鍵字主要用于內存管理,可以用在變量、方法、代碼塊和嵌套類中。更多相關介紹,需要的小伙伴可以參考一下

static目的

java中的static關鍵字主要用于內存管理。

static范圍

使用范圍:java static關鍵字可以用在變量、方法、代碼塊和嵌套類中。

作用范圍:static關鍵字屬于類,而不是類的實例。

靜態(tài)(static)修飾

  • 變量、方法:稱為類變量/方法、靜態(tài)變量/方法;修飾變量或方法,表示這個變量/方法屬于這個類,而不屬于單個對象
  • 代碼塊:稱為靜態(tài)代碼塊;修飾代碼塊,表示該代碼塊為靜態(tài)代碼塊
  • 嵌套類:稱為靜態(tài)內部類;修飾內部類,表示該類為靜態(tài)內部類??捎糜趯崿F(xiàn)單例模式。
  • 可用于修飾import,進行靜態(tài)導包,導入類中所有靜態(tài)方法。最常見的使用場景是在JUnit進行單元測試時。

靜態(tài)變量

類的成員變量可以分為以下兩種:

  • 靜態(tài)變量(或稱為類變量),指被 static 修飾的成員變量。
  • 實例變量,指沒有被 static 修飾的成員變量。

靜態(tài)變量與實例變量的區(qū)別如下:

1)靜態(tài)變量

  • 運行時,Java 虛擬機只為靜態(tài)變量分配一次內存,加載類過程中完成靜態(tài)變量的內存分配。
  • 在類的內部,可以在任何方法內直接訪問靜態(tài)變量。
  • 在其他類中,可以通過類名訪問該類中的靜態(tài)變量。

2)實例變量

  • 每創(chuàng)建一個實例,Java 虛擬機就會為實例變量分配一次內存。
  • 在類的內部,可以在非靜態(tài)方法中直接訪問實例變量。
  • 在本類的靜態(tài)方法或其他類中則需要通過類的實例對象進行訪問。

靜態(tài)變量在類中的作用如下:

  • 靜態(tài)變量可以被類的所有實例共享,因此靜態(tài)變量可以作為實例之間的共享數(shù)據(jù),增加實例之間的交互性。
  • 如果類的所有實例都包含一個相同的常量屬性,則可以把這個屬性定義為靜態(tài)常量類型,從而節(jié)省內存空間。例如,在類中定義一個靜態(tài)常量 PI。
  • 靜態(tài)變量的好處:它能使程序存儲器高效(即它節(jié)省內存)。

靜態(tài)方法

同成員變量,成員方法也可以分為以下兩種:

  • 靜態(tài)方法(或稱為類方法),指被 static 修飾的成員方法。
  • 實例方法,指沒有被 static 修飾的成員方法。

靜態(tài)方法與實例方法的區(qū)別:

靜態(tài)方法,屬于類,而不屬于類的對象。

  • 它通過類直接被調用,無需創(chuàng)建類的對象。
  • 靜態(tài)方法中,不能使用 this 關鍵字,也不能直接訪問所屬類的實例變量和實例方法;
  • 靜態(tài)方法中,可以直接訪問所屬類的靜態(tài)變量和靜態(tài)方法。
  • 同this 關鍵字,super 關鍵字也與類的實例相關,靜態(tài)方法中不能使用 super 關鍵字。

實例方法,可直接訪問所屬類的靜態(tài)變量、靜態(tài)方法、實例變量和實例方法。

靜態(tài)方法與靜態(tài)變量好處:

  • 屬于類級別,無需創(chuàng)建對象就即可直接使用,使用方便。
  • 全局唯一,內存中唯一,靜態(tài)變量可以唯一標識某些狀態(tài)。
  • 類加載時候初始化,常駐在內存,調用快捷方便。

靜態(tài)方法與靜態(tài)變量缺點:

  • 靜態(tài)方法不能調用非靜態(tài)的方法和變量。 
  • 不能使用this和super關鍵字。

靜態(tài)方法與靜態(tài)變量適用場景:

  • 靜態(tài)方法,最適合工具類中方法的定義;比如文件操作,日期處理方法等。
  • 靜態(tài)方法,適合入口方法定義;比如單例模式,因從外部拿不到構造函數(shù),所以定義一個靜態(tài)的方法獲取對象非常有必要。
  • 靜態(tài)變量適合全局變量的定義;舉例:用一個布爾型靜態(tài)成員變量做控制標志。

靜態(tài)代碼塊

定義:靜態(tài)代碼塊,是 Java 類中的 static{ } 修飾的代碼。

作用:用于類初始化時,為類的靜態(tài)變量賦初始值,提升程序性能。

靜態(tài)代碼塊的特點如下:

靜態(tài)代碼塊,有點類似于一個方法,但不可以存在于任何方法體內。

靜態(tài)代碼塊,可以置于類中的任何地方,類中可以有多個靜態(tài)初始化塊。

Java 虛擬機在加載類時執(zhí)行,將只需要進行一次初始化的操作放在 static 代碼塊。

類中含多個靜態(tài)代碼塊,Java虛擬機將按它們在類中出現(xiàn)的順序依次執(zhí)行,且都執(zhí)行一次。

同靜態(tài)代碼塊與靜態(tài),不能直接訪問類的實例變量和實例方法,需通過類的對象訪問。

靜態(tài)類

java中一個類要被聲明為static的,只有一種情況,就是靜態(tài)內部類(內嵌類)。如在外部類聲明為static的,程序會編譯都不會通過。

  • 1、靜態(tài)內部類,跟靜態(tài)方法一樣,只能訪問靜態(tài)成員變量和方法,不能訪問非靜態(tài)方法和屬性。
  • 2、普通內部類,可以訪問任意外部類的成員變量和方法。
  • 3、靜態(tài)內部類,可以聲明普通成員變量和方法,而普通內部類不能聲明static成員變量和方法。 
  • 4、靜態(tài)內部類,可以單獨初始化。

可用于實現(xiàn)單例模式。

public class StaticSingleton {
    /**
     * 只有當顯式調用getInstance()方法之后,這里的靜態(tài)內部類SingletonHolder才會被加載
     * 從而將INSTANCE初始化
     * 因此,通過靜態(tài)內部類實現(xiàn)的單例模式是懶漢式的
     */
    private static class SingletonHolder {  // 通過靜態(tài)內部類持有實例
        private static final StaticSingleton INSTANCE = new StaticSingleton();
    }

    private StaticSingleton() { }   // 用private隱藏構造方法

    public static StaticSingleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

static變量存儲在方法區(qū)(Method Area)

方法區(qū)是被所有線程共享,所有字段和方法字節(jié)碼,以及一些特殊方法,如構造函數(shù),接口代碼也在此定義,簡單說,所有定義的方法的信息都保存在該區(qū)域,此區(qū)域屬于共享區(qū)間。

靜態(tài)變量(static)、常量(final)、類信息(構造方法、接口定義)(Class)、運行時的常量池存在方法區(qū)中,但是實例變量存在堆內存中,和方法區(qū)無關。

到此這篇關于Java static關鍵字詳細解析的文章就介紹到這了,更多相關Java static關鍵 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring學習之參數(shù)傳遞與檢驗詳解

    spring學習之參數(shù)傳遞與檢驗詳解

    這篇文章主要給大家介紹了關于spring參數(shù)傳遞與檢驗的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作能帶來一定的幫助,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-07-07
  • Springboot打成war包并在tomcat中運行的部署方法

    Springboot打成war包并在tomcat中運行的部署方法

    這篇文章主要介紹了Springboot打成war包并在tomcat中運行,在文中還給大家介紹了SpringBoot war包tomcat運行啟動報錯(Cannot determine embedded database driver class for database type NONE)的解決方法,需要的朋友可以參考下
    2018-01-01
  • Java軟件設計模式之橋接模式詳解

    Java軟件設計模式之橋接模式詳解

    這篇文章主要介紹了Java軟件設計模式之橋接模式詳解,橋接模式也叫做橋梁模式,結構型設計模式的一種,顧名思義,就是用來連接兩個部分,為被分離了的抽象部分和實現(xiàn)部分搭橋,需要的朋友可以參考下
    2023-07-07
  • SpringCloud重試機制配置詳解

    SpringCloud重試機制配置詳解

    本篇文章主要介紹了SpringCloud重試機制配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Java基礎之extends用法詳解及簡單實例

    Java基礎之extends用法詳解及簡單實例

    這篇文章主要介紹了 Java基礎之extends用法詳解及簡單實例的相關資料,需要的朋友可以參考下
    2017-02-02
  • Java page cache回寫機制案例詳解

    Java page cache回寫機制案例詳解

    這篇文章主要介紹了Java page cache回寫機制案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • Java的項目構建工具Maven的配置和使用教程

    Java的項目構建工具Maven的配置和使用教程

    Maven是Java世界中的項目管理和構建自動化工具,基于POM項目對象模型的思想,下面我們就具體來看一下具體的Java的項目構建工具Maven的配置和使用教程:
    2016-05-05
  • java中final關鍵字使用示例詳解

    java中final關鍵字使用示例詳解

    Java中的final關鍵字非常重要,它可以應用于類、方法以及變量。這篇文章中帶你看看什么是final關鍵字?將變量,方法和類聲明為final代表了什么?使用final的好處是什么?最后也有一些使用final關鍵字的實例
    2014-01-01
  • Maven2環(huán)境安裝與準備工作詳解

    Maven2環(huán)境安裝與準備工作詳解

    這篇文章主要為大家詳細介紹了Maven2環(huán)境安裝與準備工作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中Lambda表達式的進化之路詳解

    Java中Lambda表達式的進化之路詳解

    本文通過示例大家給大家介紹了Java中Lambda表達式的進化之路,感興趣的的朋友一起看看吧,希望能夠給你帶來幫助
    2021-11-11

最新評論

津南区| 社旗县| 潜江市| 元谋县| 同江市| 瑞丽市| 凯里市| 旺苍县| 巢湖市| 南和县| 宁城县| 黎平县| 高邮市| 谢通门县| 双流县| 会宁县| 阳西县| 政和县| 曲阳县| 林州市| 嘉黎县| 芮城县| 新乡市| 呈贡县| 治县。| 庆城县| 博兴县| 平乐县| 酒泉市| 西青区| 扶沟县| 石楼县| 沁源县| 淅川县| 同仁县| 长治市| 双牌县| 荣成市| 濮阳县| 临沧市| 观塘区|