Java 為什么對(duì)常量的修改沒有生效?

寫這篇文章的起因是前幾天同事改了一個(gè)常量類中的提示,發(fā)布到測(cè)試環(huán)境后沒有生效,正好看 《Java 解惑(謎題 93: 類的戰(zhàn)爭)》 提到了這個(gè)問題,所以寫篇文章記錄一下。

以下均使用命令行進(jìn)行演示,至于為什么沒有使用 IDE 后面會(huì)提到。

先看一個(gè)簡單的 Constants 類:

/**
 * Created by Poison on 15/05/2017.
 */
public class Constants {

    public static final String a = "before fixing";

}

再看下 Solution 類:

/**
 * Created by Poison on 15/05/2017.
 */
public class Solution {

    public static void main(String[] args) {
        System.out.println(Constants.a);
    }

}

編譯,運(yùn)行 Solution 的主函數(shù),毫無疑問結(jié)果如圖:

before fixing

現(xiàn)在我們把 Constants 類修改為:

/**
 * Created by Poison on 15/05/2017.
 */
public class Constants {

    public static final String a = "after fixing";

}

重新編譯 Constants 類,再運(yùn)行 Solution 的主函數(shù),輸出結(jié)果如圖:

after fixing

為什么修改沒有生效?是 Constants 類的問題,還是 Solution 類的問題?

我們先反編譯 Constants 類看看:

javap Constants

由上圖可見,對(duì) Constants 類的修改是生效的。

再看反編譯的 Solution 類:

javap Solution

看到這里,原因也就明確了,常量變量會(huì)被編譯進(jìn)那些引用它們的類中。這和筆者同事前幾日遇到的情況一模一樣,同事在本地開發(fā)時(shí)修改了常量類中的常量字段的值,本地是生效的,原因是因?yàn)楸镜亻_發(fā)使用了 IDE,而 IDE 將引用到常量類的類也重新編譯了,所以能看到最新的值,而在發(fā)布到測(cè)試環(huán)境的過程中,打包機(jī)僅僅將常量類所屬的模塊進(jìn)行了重新編譯,未將引用常量的類的模塊重新編譯,所以當(dāng)時(shí)看見的是更改前的值,同事將常量類的 class 文件反編譯后看見的也是修改后的值,但是卻忘了看引用該常量類的類,所以當(dāng)時(shí)沒有發(fā)現(xiàn)這個(gè)問題。

Java 解惑
Java 虛擬機(jī)規(guī)范(Java SE 8版)

更多文章,請(qǐng)?jiān)L問 田爽Poison

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,810評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,662評(píng)論 18 399
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,688評(píng)論 9 118
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,268評(píng)論 6 342
  • 【視覺志】 【雪小禪】 【我看見】 【攝影世界】 【國學(xué)精粹與生活藝術(shù)】
    湍河故事閱讀 224評(píng)論 0 2

友情鏈接更多精彩內(nèi)容