成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

_ipo / 2704人閱讀

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

代碼中我們一般都使用一個(gè)類統(tǒng)一管理常量,例如:

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

這樣我們?cè)谛薷某A恐档臅r(shí)候只用在這個(gè)類中修改即可,今天我遇到了一個(gè)很費(fèi)解的問題,我在SpringMVC工程中需要需改一個(gè)常量值,因?yàn)镾pringMVC工程的class文件眾多,所以我偷懶只將修改后編譯的AppConst class文件上傳到服務(wù)器替換了,結(jié)果無論怎么調(diào)用常量對(duì)應(yīng)的值都沒有更新過來,通過反編譯調(diào)用的class文件發(fā)現(xiàn),使用常量的地方,已經(jīng)被替換成常量的值,也就是說編譯后常量的值“就地展開”,不是“動(dòng)態(tài)引用”的,經(jīng)過搜索發(fā)現(xiàn)如下內(nèi)容:

靜態(tài)常量(即用 static final
修飾的變量)是編譯時(shí)常量,當(dāng)一個(gè)class文件編譯完畢,它內(nèi)部使用到的所有常量的具體值就已經(jīng)確定了,不能想當(dāng)然地以為它在運(yùn)行時(shí)并連接常量管理類之后才會(huì)以引用方式使用常量。

舉個(gè)例子

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

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70088.html

相關(guān)文章

  • 探究finaljava作用

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

    Baaaan 評(píng)論0 收藏0
  • 探究finaljava作用

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

    番茄西紅柿 評(píng)論0 收藏0
  • 探究finaljava作用

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

    番茄西紅柿 評(píng)論0 收藏0
  • [轉(zhuǎn)] 再論 java final 變量

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

    soasme 評(píng)論0 收藏0
  • JVM JIT編譯能改變某些反射執(zhí)行結(jié)果

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

    lcodecorex 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<