在J2SE?5.0版本中,java語言引入了很多新的特性,本文將主要介紹static?import。static?import主要解決的問題是方便開發人員創建和使用全局的常量以及靜態的方法。要使用這一新的特性您應該首先從java.sun.com下載最新的j2sdk?5.0。?
????在《effective?java》中作者曾經談到在接口中定義常量是很糟糕的一種使用方法,我們應該始終使用接口來定義類型。但是在實際開發工作中還是有很多人這樣使用接口,他們這樣做的原因是這樣定義常量使用起來很方便。例如如下定義方式:
???public?interface?BadIrrationalConstants?{
?????public?static?final?double?SQRT_TWO?=?1.414;
?????public?static?final?double?SQRT_THREE?=?1.732;
???}
?public?interface?BadTranscendentalConstants?{
?????public?static?final?double?PI?=?3.14159;
?????public?static?final?double?E?=?2.71828;}
???
????如果你想在自己的類中使用這些接口中定義的常量的時候,那么你必須要實現這些接口。比如
?????public?class?BadUseOfConstants?implements
?????BadTranscendentalConstants,?BadIrrationalConstants?{
????public?static?double?sinPiOverFour()?{
???????return?SQRT_TWO?/?2;
?????}
?????public?static?void?main(String[]?args)?{
???????System.out.println("Pi?is?approximately?"?+?PI);
???????System.out.println("The?sin?of?Pi/4?is?about?"?+
?????????sinPiOverFour());
?????}
???}
????這樣這些常量就變成你的類的一部分了,如果這個類不是final的話,其它的類繼承了這個類又使得它繼承了這些常量,但是這也許不是用戶需要的結果。
????針對這樣的情況,我們可以這樣做,那就是在一個類中定義這些常量,使用的時候可以通過ClassName.variableName來訪問他們。例如
package?staticEx;
???public?class?IrrationalConstants?{
?????public?static?final?double?SQRT_TWO?=?1.414;
?????public?static?final?double?SQRT_THREE?=?1.732;
???}
package?staticEx;
???public?class?TranscendentalConstants?{
?????public?static?final?double?PI?=?3.14159;
?????public?static?final?double?E?=?2.71828;
???}
????現在J2SE?5.0提供了靜態導入的功能,你只需要在import關鍵字后面寫一個static關鍵字就可以直接使用類中定義的常量了,例如
???import?static?staticEx.IrrationalConstants.SQRT_TWO;
???import?static?staticEx.IrrationalConstants.SQRT_THREE;
???import?static?staticEx.TranscendentalConstants.PI;
????當然你也可以使用.*的格式,例如
import?static?staticEx.IrrationalConstants.*;的格式??
package?staticEx;
???import?static?staticEx.IrrationalConstants.SQRT_TWO;
???import?static?staticEx.IrrationalConstants.SQRT_THREE;
???import?static?staticEx.TranscendentalConstants.PI;
???public?class?ConstantsWithStaticImport?{
?????public?static?double?sinPiOverFour()?{
???????return?SQRT_TWO?/?2;
?????}
?????public?static?void?main(String[]?args)?{
???????System.out.println("Pi?is?approximately?"?+?PI);
???????System.out.println("The?sin?of?Pi/4?is?about?"?+
?????????sinPiOverFour());
?????}
???}
????運行該程序會得到
???Pi?is?approximately?3.14159
???The?sin?of?Pi/4?is?about?0.707
????在這里提醒大家一下,如果你過多的使用.*的樣式,那么可能會給程序的可讀性帶來負面的影響。因為你很難看出這個變量在哪里定義的。
????對常量定義是如此,對靜態方法的使用也適用。例如下面的例子
??package?staticEx;
???public?class?IrrationalConstants2?{
?????public?static?final?double?SQRT_TWO?=?1.414;
?????public?static?final?double?SQRT_THREE?=?1.732;
?????public?static?double?sinPiOverFour()?{
???????return?SQRT_TWO?/?2;
?????}
???}
package?staticEx;
???import?static?staticEx.IrrationalConstants2.*;
???import?static?staticEx.TranscendentalConstants.*;
???public?class?ConstantsWithStaticImport2?{
?????public?static?void?main(String[]?args)?{
???????System.out.println("Pi?is?approximately?"?+?PI);
???????System.out.println("The?sin?of?Pi/4?is?about?"?+
?????????sinPiOverFour());
?????}
???}
????在ConstantsWithStaticImport2類中靜態導入IrrationalConstants2后就可以直接使用它的靜態方法sinPiOverFour()了。
????以上簡單的介紹了如何使用static?import,您可以參考一下連接獲得更多的介紹:
http://java.sun.com/developer/JDCTechTips/2004/tt1005.html
http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。