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

java對象中什么時候適合用static修飾符踩坑解決記錄

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

static修飾符

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

適用static修飾符場景

  • 常量定義

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

例如:public static final int MAX_VALUE = 1000;

  • 工廠方法

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

例如:public static Logger getLogger();

  • 共享的資源

將函數或成員變量設置為靜態(tài)的,可以使它們在所有類的實例之間共享。靜態(tài)變量和方法被所有實例共享,因此可以用來實現共享的資源庫。

例如:private static Connection conn;

  • 嵌套類

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

例如:public static class MyStaticNestedClass { }

需要注意的是,使用靜態(tài)修飾符需要謹慎,因為它們具有全局性。靜態(tài)方法和變量可以在不同的地方被訪問和修改,因此可能會引起非預期的副作用。因此,應該根據具體情況謹慎使用靜態(tài)修飾符。

不適用static修飾符場景

  • 實例變量

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

  • 實例方法

實例方法是與類的每個實例相關聯的方法,它們只能通過創(chuàng)建對象實例來訪問。因為靜態(tài)方法在每個實例之間共享,所以不能用它們來訪問實例數據或實例方法。

  • 單例模式

在單例模式中,只應該有一個實例,因此不能使用靜態(tài)變量和方法,因為它們會在整個應用程序中共享。

  • 線程不安全的類

如果一個類是線程不安全的,那么使用靜態(tài)變量和方法來訪問它們可能是危險的,因為該類可能會在多個線程之間共享,并可能導致意外的后果。

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

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

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

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

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

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

  • 并發(fā)訪問問題

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

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

踩坑

講一個,我剛犯的錯:

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

定義對象的時候,我對可能不安全的類加上了static,當時考慮到ArrayList是線程不安全的,所以特意使用了CopyOnWriteArrayList。

但沒成想,這里的list是被實例之間共享的,這樣多個實例都可以訪問到這個list,那么就不是我想要的結果了,我想要的是彼此不可見。

好基礎的bug啊,算是補上了。

以上就是java對象中什么時候適合用static修飾符踩坑解決記錄的詳細內容,更多關于java對象static修飾符的資料請關注腳本之家其它相關文章!

相關文章

  • MyBatis-Plus?Mapper?接口方法操作詳解

    MyBatis-Plus?Mapper?接口方法操作詳解

    MyBatis-Plus的BaseMapper提供了豐富的開箱即用方法,所有方法都不需要編寫SQL即可使用,可以滿足95%以上的日常開發(fā)需求,本文給大家介紹MyBatis-Plus?Mapper?接口方法詳解,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Maven項目中pom.xml父子模塊配置小結

    Maven項目中pom.xml父子模塊配置小結

    Maven父子模塊結構通過pom.xml實現配置復用、版本統(tǒng)一和批量構建,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-08-08
  • Java NIO 文件通道 FileChannel 用法及原理

    Java NIO 文件通道 FileChannel 用法及原理

    這篇文章主要介紹了Java NIO 文件通道 FileChannel 用法和原理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java中fastjson生成和解析json數據(序列化和反序列化數據)

    java中fastjson生成和解析json數據(序列化和反序列化數據)

    本篇文章主要介紹了java中fastjson生成和解析json數據(序列化和反序列化數據),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 從Maven到Spring Boot實戰(zhàn)教程

    從Maven到Spring Boot實戰(zhàn)教程

    本文系統(tǒng)梳理了Java后端開發(fā)的核心技術棧,從Maven項目管理到Spring Boot實戰(zhàn),從MyBatis持久層到Spring MVC Web開發(fā),涵蓋了項目開發(fā)的全流程與關鍵知識點,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 將SpringBoot的Jar注冊成Windows服務的實現方法

    將SpringBoot的Jar注冊成Windows服務的實現方法

    當前項目有個地圖編輯器,后端用的是SpringBoot框架,外網剛好有一臺空閑的Windows服務器就直接拿來用了,將Java程序部署成Windows服務可以用WinSW (Windows Service Wrapper)來實現,文中有詳細的操作步驟,需要的朋友可以參考下
    2023-11-11
  • Java輸入流Scanner/BufferedReader使用方法示例

    Java輸入流Scanner/BufferedReader使用方法示例

    這篇文章主要介紹了Java輸入流Scanner/BufferedReader使用方法,大家看示例吧
    2013-11-11
  • 解決IDEA開發(fā)工具右側沒有Maven工具欄的問題

    解決IDEA開發(fā)工具右側沒有Maven工具欄的問題

    這篇文章主要給大家解決了IDEA開發(fā)工具右側沒有Maven工具欄的問題,文中有詳細的解決步驟,如果有遇到一樣問題的小伙伴,可以參考閱讀本文
    2023-09-09
  • Java泛型的繼承和實現操作示例

    Java泛型的繼承和實現操作示例

    這篇文章主要介紹了Java泛型的繼承和實現操作,結合實例形式分析了java泛型類的繼承以及泛型接口的實現相關操作技巧,需要的朋友可以參考下
    2019-08-08
  • mybatis中點擊mapper接口快速定位到對應xml中sql方式

    mybatis中點擊mapper接口快速定位到對應xml中sql方式

    這篇文章主要介紹了mybatis中點擊mapper接口快速定位到對應xml中sql方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

南陵县| 罗田县| 扶绥县| 河南省| 平顶山市| 贵阳市| 陆河县| 汉寿县| 蓝山县| 湟中县| 乐至县| 金华市| 罗甸县| 清徐县| 张家界市| 德惠市| 五指山市| 杨浦区| 醴陵市| 军事| 兴国县| 平塘县| 平安县| 建宁县| 邓州市| 富川| 新平| 沂源县| 色达县| 晋州市| 伊宁市| 伽师县| 上高县| 鲁山县| 夏河县| 隆德县| 江口县| 三穗县| 化州市| 侯马市| 新平|