亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java對(duì)象中什么時(shí)候適合用static修飾符踩坑解決記錄

 更新時(shí)間:2023年09月21日 10:08:54   作者:GuangHui  
這篇文章主要為大家介紹了java對(duì)象中什么時(shí)候適合用static修飾符踩坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

static修飾符

使用static修飾符可以使成員變量或方法具有類級(jí)別而非實(shí)例級(jí)別的特性,即被靜態(tài)修飾的成員在所有該類的實(shí)例之間是共享的。因此,應(yīng)該根據(jù)具體情況考慮何時(shí)適合使用static修飾符。

適用static修飾符場(chǎng)景

  • 常量定義

經(jīng)常使用的常量可以使用靜態(tài)修飾符聲明為靜態(tài)常量,這樣就可以在整個(gè)應(yīng)用程序中訪問(wèn)它們。

例如:public static final int MAX_VALUE = 1000;

  • 工廠方法

在某些情況下,工廠方法可以使用靜態(tài)修飾符創(chuàng)建一個(gè)對(duì)象實(shí)例。

例如:public static Logger getLogger();

  • 共享的資源

將函數(shù)或成員變量設(shè)置為靜態(tài)的,可以使它們?cè)谒蓄惖膶?shí)例之間共享。靜態(tài)變量和方法被所有實(shí)例共享,因此可以用來(lái)實(shí)現(xiàn)共享的資源庫(kù)。

例如:private static Connection conn;

  • 嵌套類

在Java中,嵌套類可以是靜態(tài)的,靜態(tài)嵌套類只能訪問(wèn)外部類的靜態(tài)成員,因此如果嵌套類沒(méi)有必要訪問(wèn)外部類的非靜態(tài)成員,那么可以使用靜態(tài)嵌套類。

例如:public static class MyStaticNestedClass { }

需要注意的是,使用靜態(tài)修飾符需要謹(jǐn)慎,因?yàn)樗鼈兙哂腥中浴lo態(tài)方法和變量可以在不同的地方被訪問(wèn)和修改,因此可能會(huì)引起非預(yù)期的副作用。因此,應(yīng)該根據(jù)具體情況謹(jǐn)慎使用靜態(tài)修飾符。

不適用static修飾符場(chǎng)景

  • 實(shí)例變量

實(shí)例變量與類的每個(gè)實(shí)例相關(guān)聯(lián),它們的值在每個(gè)實(shí)例之間不共享。因此,在多個(gè)實(shí)例之間共享變量時(shí),不能使用靜態(tài)變量。

  • 實(shí)例方法

實(shí)例方法是與類的每個(gè)實(shí)例相關(guān)聯(lián)的方法,它們只能通過(guò)創(chuàng)建對(duì)象實(shí)例來(lái)訪問(wèn)。因?yàn)殪o態(tài)方法在每個(gè)實(shí)例之間共享,所以不能用它們來(lái)訪問(wèn)實(shí)例數(shù)據(jù)或?qū)嵗椒ā?/p>

  • 單例模式

在單例模式中,只應(yīng)該有一個(gè)實(shí)例,因此不能使用靜態(tài)變量和方法,因?yàn)樗鼈儠?huì)在整個(gè)應(yīng)用程序中共享。

  • 線程不安全的類

如果一個(gè)類是線程不安全的,那么使用靜態(tài)變量和方法來(lái)訪問(wèn)它們可能是危險(xiǎn)的,因?yàn)樵擃惪赡軙?huì)在多個(gè)線程之間共享,并可能導(dǎo)致意外的后果。

總之,如果想要在多個(gè)實(shí)例之間共享數(shù)據(jù)或方法,那么靜態(tài)修飾符是一個(gè)合理的選擇。但是,需要明確靜態(tài)變量和方法適合的范圍,而不是隨意的使用它們,這樣才能確保代碼的正確性和可維護(hù)性。

另外,需要注意的是,使用靜態(tài)修飾符還存在一些需要特別注意的問(wèn)題:

  • 靜態(tài)代碼塊的執(zhí)行順序

Java中,靜態(tài)初始化器和變量初始化器代碼塊是隨著類的初始化而執(zhí)行的。當(dāng)類第一次被加載時(shí),它所有的靜態(tài)代碼塊會(huì)被執(zhí)行,因此必須注意執(zhí)行順序,避免引用尚未初始化的變量。

  • 靜態(tài)變量的生命周期

靜態(tài)變量的生命周期是在整個(gè)應(yīng)用程序中,它們不會(huì)像實(shí)例變量那樣在實(shí)例銷毀時(shí)被釋放。因此,如果將靜態(tài)變量賦予了不正確的值,那么這個(gè)值將會(huì)一直存在,直到程序終止。

  • 并發(fā)訪問(wèn)問(wèn)題

由于靜態(tài)變量和方法可以在不同的地方被訪問(wèn)和修改,因此在多線程環(huán)境下可能會(huì)出現(xiàn)并發(fā)訪問(wèn)問(wèn)題,導(dǎo)致線程安全問(wèn)題。需要使用線程同步控制來(lái)避免這種情況。

總的來(lái)說(shuō),在使用靜態(tài)修飾符時(shí),需要考慮到它們的適用范圍,并謹(jǐn)慎使用,才能避免意外的副作用和錯(cuò)誤,并確保代碼的正確性和可維護(hù)性。

踩坑

講一個(gè),我剛犯的錯(cuò):

public class OrgPushRuleMatchResultBO {
    /**
     * 規(guī)則配置匹配成功后,構(gòu)建的組織推單記錄列表
     */
    private static List<OrganizationPushOrderRecordEntity> orgPushOrderRecords = new CopyOnWriteArrayList<>();
    public void addOrgPushOrder(final OrganizationPushOrderRecordEntity organizationPushOrderRecord) {
        orgPushOrderRecords.add(organizationPushOrderRecord);
    }
}

定義對(duì)象的時(shí)候,我對(duì)可能不安全的類加上了static,當(dāng)時(shí)考慮到ArrayList是線程不安全的,所以特意使用了CopyOnWriteArrayList。

但沒(méi)成想,這里的list是被實(shí)例之間共享的,這樣多個(gè)實(shí)例都可以訪問(wèn)到這個(gè)list,那么就不是我想要的結(jié)果了,我想要的是彼此不可見(jiàn)。

好基礎(chǔ)的bug啊,算是補(bǔ)上了。

以上就是java對(duì)象中什么時(shí)候適合用static修飾符踩坑解決記錄的詳細(xì)內(nèi)容,更多關(guān)于java對(duì)象static修飾符的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • idea連接數(shù)據(jù)庫(kù)的操作方法

    idea連接數(shù)據(jù)庫(kù)的操作方法

    這篇文章主要介紹了idea如何連接數(shù)據(jù)庫(kù),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • SpringBoot JPA實(shí)現(xiàn)查詢多值

    SpringBoot JPA實(shí)現(xiàn)查詢多值

    這篇文章主要為大家詳細(xì)介紹了SpringBoot JPA實(shí)現(xiàn)查詢多值,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • java對(duì)list<Object>進(jìn)行手動(dòng)分頁(yè)實(shí)現(xiàn)

    java對(duì)list<Object>進(jìn)行手動(dòng)分頁(yè)實(shí)現(xiàn)

    本文主要介紹了java對(duì)list<Object>進(jìn)行手動(dòng)分頁(yè)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringbootJPA分頁(yè) PageRequest過(guò)時(shí)的替代方法

    SpringbootJPA分頁(yè) PageRequest過(guò)時(shí)的替代方法

    這篇文章主要介紹了SpringbootJPA分頁(yè) PageRequest過(guò)時(shí)的替代方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot項(xiàng)目找不到j(luò)avax.servlet.Filter的問(wèn)題及解決

    SpringBoot項(xiàng)目找不到j(luò)avax.servlet.Filter的問(wèn)題及解決

    這篇文章主要介紹了SpringBoot項(xiàng)目找不到j(luò)avax.servlet.Filter的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Mysql字段和java實(shí)體類屬性類型匹配方式

    Mysql字段和java實(shí)體類屬性類型匹配方式

    這篇文章主要介紹了Mysql字段和java實(shí)體類屬性類型匹配方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 教你通過(guò)B+Tree平衡多叉樹(shù)理解InnoDB引擎的聚集和非聚集索引

    教你通過(guò)B+Tree平衡多叉樹(shù)理解InnoDB引擎的聚集和非聚集索引

    大家都知道B+Tree是從二叉樹(shù)演化而來(lái),在這之前我們來(lái)先了解二叉樹(shù)、平衡二叉樹(shù)、平衡多叉樹(shù),這篇文章主要介紹了通過(guò)B+Tree平衡多叉樹(shù)理解InnoDB引擎的聚集和非聚集索引,需要的朋友可以參考下
    2022-01-01
  • java中List移除元素的四種方式

    java中List移除元素的四種方式

    本文主要介紹了java中List移除元素的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的方法

    SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的方法

    這篇文章主要介紹了SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址,本篇文章主要講訴使用SpringBoot項(xiàng)目配合Ajax和redis實(shí)現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例,需要的朋友可以參考下
    2024-03-03
  • springboot @WebFilter注解過(guò)濾器的實(shí)現(xiàn)

    springboot @WebFilter注解過(guò)濾器的實(shí)現(xiàn)

    這篇文章主要介紹了springboot @WebFilter注解過(guò)濾器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論