java 核心技術-12版 卷Ⅰ- 4.4.2 靜態(tài)常量
原文
靜態(tài)變量使用得比較少,但靜態(tài)常量卻很常用。例如,Math 類中定義了一個靜態(tài)常量:
public class Math{
????// ....
??public static final double PI = 3.14159265358979323846;
}
在你的程序中,可以用 Math.PI 來訪問這個常量。
如果省略關鍵字 static , 那么PI 就變成了Math 類的一個實例字段。也就是說,需要通過Math 類的一個對象來訪問PI ,并且每一個Math 對象都要它自己的一個PI 副本。
另一個你已經多次使用的靜態(tài)常量是System.out 。 它在System類中聲明如下
public class System{
????// ...
public static final PrintStream out = null;
}
前面曾經多次提到過,最好不要有公共字段,因為誰都可以修改公共字段。不過,公共常量(即final 字段)卻沒問題。因為out 被聲明為final ,所以,不允許再將它重新賦值為另一個打印流:
System.out=new PrintStream(..);// ERROR -- out is final
注釋:如果查看System類,就會發(fā)現(xiàn)有一個setOut方法可以將System.out設置為不同的流。你可能會感到奇怪,為什么這個方法可以修改final 變量的值。原因在于,setOut方法是一個原生方法,而不是在Java語言中實現(xiàn)的。原生方法可以繞過Java語言的訪問控制機制。這是一種特殊的解決方法,你自己編寫程序時不要模仿這種做法。
標簽: