国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java final常量“無法更新”的問題

_ipo / 2698人閱讀

摘要:舉個例子類使用了這個常量,表面上是通過類取得的這個值,實際上在被編譯后,其代碼其實變成了通過上面的分析,要使常量修改后,其他引用的也同步改過來,就必須將引用了這個常量的重新編譯后上傳,這樣才能同步修改。

代碼中我們一般都使用一個類統一管理常量,例如:

public class AppConst {  
    public static final String STR_1 = "String1";  
    public static final String STR_2 = "String2";  
    ......  
} 

這樣我們在修改常量值的時候只用在這個類中修改即可,今天我遇到了一個很費解的問題,我在SpringMVC工程中需要需改一個常量值,因為SpringMVC工程的class文件眾多,所以我偷懶只將修改后編譯的AppConst class文件上傳到服務器替換了,結果無論怎么調用常量對應的值都沒有更新過來,通過反編譯調用的class文件發現,使用常量的地方,已經被替換成常量的值,也就是說編譯后常量的值“就地展開”,不是“動態引用”的,經過搜索發現如下內容:

靜態常量(即用 static final
修飾的變量)是編譯時常量,當一個class文件編譯完畢,它內部使用到的所有常量的具體值就已經確定了,不能想當然地以為它在運行時并連接常量管理類之后才會以引用方式使用常量。

舉個例子

import AppConst;  
public class SomeService {  
    public void serviceJob1() {  
        System.out.println(AppConst.STR_1);  
    }  
}

類SomeService使用了STR_1這個常量,表面上是通過AppConst類取得的這個值,實際上在SomeService被編譯后,其代碼其實變成了

import AppConst;  
public class SomeService {  
    public void serviceJob1() {  
        System.out.println("String1");  
    }  
}

通過上面的分析,要使常量修改后,其他引用的class也同步改過來,就必須將引用了這個常量的class重新編譯后上傳,這樣才能同步修改。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70088.html

相關文章

  • 探究finaljava作用

    摘要:關鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設計思想呢一修飾變量基礎修飾基本數據類型變量和引用數據類型變量相信大家都具備基本的常識被修飾的變量 final關鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    Baaaan 評論0 收藏0
  • 探究finaljava作用

    摘要:關鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設計思想呢一修飾變量基礎修飾基本數據類型變量和引用數據類型變量相信大家都具備基本的常識被修飾的變量 final關鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • 探究finaljava作用

    摘要:關鍵字的字面意思是最終的不可修改的這似乎是一個看見名字就大概能知道怎么用的語法但你是否有深究過在各個場景中的具體使用方法注意事項以及背后涉及的設計思想呢一修飾變量基礎修飾基本數據類型變量和引用數據類型變量相信大家都具備基本的常識被修飾的變量 final關鍵字的字面意思是最終的, 不可修改的. 這似乎是一個看見名字就大概能知道怎么用的語法, 但你是否有深究過final在各個場景中的具體使用方法...

    番茄西紅柿 評論0 收藏0
  • [轉] 再論 java final 變量

    摘要:的內存分配方式修飾變量通常情況下,變量有個地方可以賦值直接賦值,構造函數中,或是初始化塊中。如就是對于變量,在聲明時,如果你沒有賦值,系統默認這是一個空白域,在構造函數進行初始化,如果是靜態的,則可以在初始化塊。 【java中為什么會有final變量】: final這個關鍵字的含義是這是無法改變的或者終態的; 那么為什么要阻止改變呢? java語言的發明者可能由于兩個目的而阻止改變: ...

    soasme 評論0 收藏0
  • JVM JIT編譯能改變某些反射執行結果

    摘要:某個測試服務器試圖通過反射來修改變量的值,出現了時靈時不靈的現象。這個閾值隨時會變,只是測著玩的編譯是可以取消的,現在修改如下,在用反射設值后,再次執行萬次直接取值現在的執行結果又是了。結論不要修改變量,會出問題的關于編譯期優化的更多知識 某個測試服務器試圖通過反射來修改static final變量的值,出現了時靈時不靈的現象。 開發環境無法重現。這是怎么回事呢? 先介紹背景知識 一般...

    lcodecorex 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<