讀古今文學網 > 編寫高質量代碼:改善Java程序的151個建議 > 建議2:莫讓常量蛻變成變量 >

建議2:莫讓常量蛻變成變量

常量蛻變成變量?你胡扯吧,加了final和static的常量怎麼可能會變呢?不可能二次賦值的呀。真的不可能嗎?看我們神奇的魔術,代碼如下:


public class Client{

public static void main(Stringargs){

System.out.println("常量會變哦:"+Const.RAND_CONST);

}

}

/*接口常量*/

interface Const{

//這還是常量嗎?

public static fnal int RAND_CONST=new Random().nextInt();

}


RAND_CONST是常量嗎?它的值會變嗎?絕對會變!這種常量的定義方式是極不可取的,常量就是常量,在編譯期就必須確定其值,不應該在運行期更改,否則程序的可讀性會非常差,甚至連作者自己都不能確定在運行期發生了何種神奇的事情。

甭想著使用常量會變的這個功能來實現序列號算法、隨機種子生成,除非這真的是項目中的唯一方案,否則就放棄吧,常量還是當常量使用。

注意 務必讓常量的值在運行期保持不變。