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

通過案例了解靜態(tài)修飾符static使用場景

 更新時間:2020年10月23日 11:54:17   作者:嘿熊  
這篇文章主要介紹了通過案例了解靜態(tài)修飾符static使用場景,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

  今天在csdn上看到一個關(guān)于static的帖子,里面的某個人的回復(fù)引起了我的注意?;貜?fù)的大概意思是說:"面向?qū)ο罄锩娴撵o態(tài)修飾是面向?qū)ο缶幊處淼睦a(chǎn)物,應(yīng)盡量避免使用。"這句話大體能夠體現(xiàn)static在大部分軟件工程師眼里的尷尬地位,有一部分軟件工程師除了在剛開始學(xué)習(xí)的時候,有使用過static外,就再也沒有接觸過static了。對此,我不得不說,這是一種遺憾。static是面向?qū)ο筮@個大家庭里面不可或缺的一員,少了它,面向?qū)ο蟮木幊虒⑸倭嗽S多的樂趣,多了許多煩擾。

  一、什么是static修飾符

  許多書和人都喜歡把static稱之為靜態(tài),但我不喜歡這樣稱呼它,我更喜歡直接叫它static。因為我認(rèn)為靜態(tài)這兩個字無法真正表達(dá)出static的真正作用。在程序中任何變量或者成員都是在編譯時由系統(tǒng)自動分配內(nèi)存來存儲的,而用static修飾的成員會存儲在一個static內(nèi)存區(qū)中并且一直存在,直到程序退出內(nèi)存才會釋放這個空間,也就是只要程序在運(yùn)行,那么這塊內(nèi)存就會一直存在。那么這樣的設(shè)計有什么意義了?在面向?qū)ο蟮母拍钪?,這樣的設(shè)計可是十分有意義的!因為這樣的設(shè)計,static可以用來區(qū)分成員變量、方法是屬于類本身還是屬于類實例化后的對象。有static修飾的成員屬于類本身,沒有static修飾的成員屬于類的實例。

  可能很多人還是不能理解,我在這邊快速簡單的寫個例子吧。

class a{
  public $aa = 1;
  public function aa(){
    $this->aa += 1;
    echo $this->aa;
  }
}
class b{
  public function bb(){
    $aaa = new a();
    $aaa->aa();
  }
}
class c{
  public function cc(){
    $aaa = new a();
    $aaa->aa();
  }
}
$bbb = new b();
$ccc = new c();
$bbb->bb();
echo '*******************';
$ccc->cc();

注:在"this->aa"里面的"->"是php調(diào)用方法的方式類似于java里面的"."

上面代碼很簡單相信大家都能理解,我就不解釋了。運(yùn)行后的結(jié)果是2*******************2。

上面的代碼是沒用static的情況,下面我就再寫一個用了static的demo。

class a{
  public static $aa = 1;
  public static function aa(){
    self::$aa += 1;
    echo self::$aa;
  }
}
class b{
  public function bb(){
    a::aa();
  }
}
class c{
  public function cc(){
    a::aa();
  }
}
$bbb = new b();
$ccc = new c();
$bbb->bb();
echo '*******************';
$ccc->cc();

注:"self::"和"::"是php中調(diào)用static修飾的成員的方式。里面的差異與本文要探討的內(nèi)容關(guān)系不大,咱不解釋,有興趣的可以自行研究。

最后的運(yùn)行結(jié)果是2*******************3。這說明了,在static修飾下的成員變量$aa在第一次調(diào)用后并沒有被釋放,而是依然存在static內(nèi)存塊中,所有在第二次調(diào)用后輸出的結(jié)果是3。因為第一次調(diào)用后的變量$aa從1變成了2,第二次調(diào)用的時候$aa還是2,所有二次調(diào)用后$aa變成了3。這就是static修飾的變量會一直存在的體現(xiàn)。同時,要記住在面向?qū)ο蟮木幊讨衧tatic修飾的成員不能直接調(diào)用非static修飾的成員。如果你知道了static的原理這個就很好理解了。拿java舉例,用static修飾的成員,是專門存儲在一個static內(nèi)存區(qū)里面。非static修飾的成員是存儲在堆內(nèi)存里面。兩者是分開存儲的,所以要想在static修飾的成員里面調(diào)用非static修飾的成員,就必須跟在外面調(diào)用一樣,先實例化,在調(diào)用。對于那為什么可以在非static修飾的成員里面直接調(diào)用static修飾的成員這個問題,我的解釋是,你在類外面調(diào)用static成員時不也是可以不實例化類就直接調(diào)用嗎?更何況在類里面了?

  雖然可以在非static修飾的成員里面直接調(diào)用static修飾的成員,但是我強(qiáng)烈建議大家不要這么做!原因后面會提到。

  二、什么時候使用static修飾符

  理解了上面說的,你只是初步了解了static,要想更近一步的理解static,就要讀懂這句話:"static可以用來區(qū)分成員變量、方法是屬于類本身還是屬于類實例化后的對象。有static修飾的成員屬于類本身,沒有static修飾的成員屬于類的實例。"很多初學(xué)者會搞不懂類和類的實例有什么不同?類是抽象的存在,而類的實例是類具體化的存在。兩者是有區(qū)別的,因此就會發(fā)生一種情況,那就是有些類實例化后沒有任何意義,也就是說沒有實例化的必要,只有作為類才有意義。這時候,就必須用static來修飾成員變量和方法,表明這些變量和方法只屬于類本身。比如:在做一個項目的時候,一個合格的軟件工程師都會封裝一個公共方法類,將經(jīng)常用的公共方法放在里面,以便隨時在項目中調(diào)用。這時候,你會發(fā)現(xiàn),這個公共方法類,并沒有一個合適的具體化的實例可以來表示,只有作為類的時候,才有其意義。所以里面的公共方法都可以用static來修飾,以表示這些方法都屬于類本身,就不需要每一次使用一個公共方法的時候都要實例化出一個具體的對象了。還有就是像做安全防范(sql注入過濾、xss過濾等)的時候,將其統(tǒng)一封裝成一個Security類,里面的方法就需要用到static來修飾,不然難道每一次過濾都要實例化一次嗎?再開一個堆內(nèi)存空間?類似的還有語言包、緩存等等。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java org.w3c.dom.Document 類方法引用報錯

    Java org.w3c.dom.Document 類方法引用報錯

    這篇文章主要介紹了Java org.w3c.dom.Document 類方法引用報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringCloud中的灰度路由使用詳解

    SpringCloud中的灰度路由使用詳解

    這篇文章主要介紹了SpringCloud中的灰度路由使用詳解,在微服務(wù)中,?通常為了高可用,?同一個服務(wù)往往采用集群方式部署,?即同時存在幾個相同的服務(wù),而灰度的核心就?是路由,?通過我們特定的策略去調(diào)用目標(biāo)服務(wù)線路,需要的朋友可以參考下
    2023-08-08
  • Java線程阻塞工具LockSupport用法詳解

    Java線程阻塞工具LockSupport用法詳解

    Java中的LockSupport是一個用于線程同步的工具類,它提供了一種基于線程的阻塞和喚醒機(jī)制,LockSupport可以讓線程在特定條件下阻塞掛起,等待其他線程發(fā)送信號來喚醒它,本文將通過一個小案例給大家介紹一下LockSupport怎么用,讓你永遠(yuǎn)記住它
    2023-08-08
  • Java8中新判空方法之Optional類的使用詳解

    Java8中新判空方法之Optional類的使用詳解

    Opitonal類就是Java提供的為了解決大家平時判斷對象是否為空用的。本文將通過示例為大家講解一下Optional類的使用,感興趣的可以收藏一下
    2022-12-12
  • SpringBoot項目構(gòu)建Maven標(biāo)簽及屬性用法詳解

    SpringBoot項目構(gòu)建Maven標(biāo)簽及屬性用法詳解

    在?Spring?Boot?項目中,Maven?是最常用的構(gòu)建工具之一,本文將詳細(xì)介紹?Maven?依賴管理中的主要標(biāo)簽及其使用方法,幫助開發(fā)者更好地理解和使用?Maven?構(gòu)建工具,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了JFinal使用ajaxfileupload實現(xiàn)圖片上傳及預(yù)覽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Jmeter JDBC請求常見問題解決方案

    Jmeter JDBC請求常見問題解決方案

    這篇文章主要介紹了Jmeter JDBC請求常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • eclipse怎么引入spring boot項目插件的方法

    eclipse怎么引入spring boot項目插件的方法

    這篇文章主要介紹了eclipse怎么引入spring boot項目插件的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ)

    Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ)

    這篇文章主要介紹了Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java io流的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java設(shè)計模式之工廠方法和抽象工廠

    Java設(shè)計模式之工廠方法和抽象工廠

    本文詳細(xì)講解了Java設(shè)計模式之工廠方法和抽象工廠,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09

最新評論

台中市| 万荣县| 论坛| 玉溪市| 靖江市| 年辖:市辖区| 千阳县| 库车县| 黔西| 肥乡县| 汽车| 庆阳市| 区。| 托克托县| 二手房| 澜沧| 江城| 黄梅县| 扶风县| 驻马店市| 新巴尔虎左旗| 蓬莱市| 女性| 电白县| 宝坻区| 北海市| 河间市| 自贡市| 宁晋县| 抚远县| 开平市| 哈巴河县| 额尔古纳市| 岗巴县| 台前县| 天柱县| 孝感市| 泸州市| 米林县| 吴堡县| 湟中县|