改善Java程序建議9

建議9:少用靜態(tài)導(dǎo)入

從Java 5開始引入了靜態(tài)導(dǎo)入語法(import static)墓猎,其目是為了減少字符輸入量卷胯,提高代碼的可閱讀性,以便更好地理解程序辜贵。我們先來看一個不使用靜態(tài)導(dǎo)入的例子丘喻,也就是一般導(dǎo)入:

public class MathUtils{
    //計算圓面積
    public static double calCircleArea(double r){
            return Math.PI * r * r;
    }
    //計算球面積
    public static double calBallArea(double r){
            return 4* Math.PI * r * r;
    }
}

這是很簡單的數(shù)學(xué)工具類,我們在這兩個計算面積的方法中都引入了java.lang.Math類(該類是默認導(dǎo)入的)中的PI(圓周率)常量念颈,而Math這個類寫在這里有點多余,特別是如果MathUtils中的方法比較多時连霉,如果每次都要敲入Math這個類榴芳,繁瑣且多余,靜態(tài)導(dǎo)入可解決此類問題跺撼,使用靜態(tài)導(dǎo)入后的程序如下:

import static java.lang.Math.PI;
public class MathUtils{
    //計算圓面積
    public static double calCircleArea(double r){
            return PI * r * r;
    }
    //計算球面積
    public static double calBallArea(double r){
            return 4 * PI * r * r;
    }
}

靜態(tài)導(dǎo)入的作用是把Math類中的PI常量引入到本類中窟感,這會使程序更簡單,更容易閱讀歉井,只要看到PI就知道這是圓周率柿祈,不用每次都要把類名寫全了。但是哩至,濫用靜態(tài)導(dǎo)入會使程序更難閱讀躏嚎,更難維護。靜態(tài)導(dǎo)入后菩貌,代碼中就不用再寫類名了卢佣,但是我們知道類是“一類事物的描述”,缺少了類名的修飾箭阶,靜態(tài)屬性和靜態(tài)方法的表象意義可以被無限放大虚茶,這會讓閱讀者很難弄清楚其屬性或方法代表何意,甚至是哪一個類的屬性(方法)都要思考一番(當然仇参,IDE友好提示功能是另說)嘹叫,特別是在一個類中有多個靜態(tài)導(dǎo)入語句時,若還使用了*(星號)通配符诈乒,把一個類的所有靜態(tài)元素都導(dǎo)入進來了罩扇,那簡直就是惡夢。我們來看一段例子:

import static java.lang.Double.*;
import static java.lang.Math.*;
import static java.lang.Integer.*;
import static java.text.NumberFormat.*;

public class Client {
  //輸入半徑和精度要求抓谴,計算面積
  public static void main(String[] args) {
            double s = PI * parseDouble(args[0]);
            NumberFormat nf = getInstance();
            nf.setMaximumFractionDigits(parseInt(args[1]));
            formatMessage(nf.format(s));
  }
  //格式化消息輸出
  public static void formatMessage(String s){
            System.out.println("圓面積是:"+s);
  }
}

就這么一段程序暮蹂,看著就讓人火大:常量PI,這知道癌压,是圓周率仰泻;parseDouble方法可能是Double類的一個轉(zhuǎn)換方法,這看名稱也能猜測到滩届。那緊接著的getInstance方法是哪個類的集侯?是Client本地類被啼?不對呀,沒有這個方法棠枉,哦浓体,原來是NumberFormate類的方法,這和formateMessage本地方法沒有任何區(qū)別了—這代碼也太難閱讀了辈讶,非機器不可閱讀命浴。
所以,對于靜態(tài)導(dǎo)入贱除,一定要遵循兩個規(guī)則:

  • 不使用*(星號)通配符生闲,除非是導(dǎo)入靜態(tài)常量類(只包含常量的類或接口)。
  • 方法名是具有明確月幌、清晰表象意義的工具類碍讯。

何為具有明確、清晰表象意義的工具類扯躺?我們來看看JUnit 4中使用的靜態(tài)導(dǎo)入的例子捉兴,代碼如下:

import static org.junit.Assert.*;
public class DaoTest {
  @Test
  public void testInsert(){
            //斷言
            assertEquals("foo", "foo");
            assertFalse(Boolean.FALSE);
  }
}

我們從程序中很容易判斷出assertEquals方法是用來斷言兩個值是否相等的,assertFalse方法則是斷言表達式為假录语,如此確實減少了代碼量倍啥,而且代碼的可讀性也提高了,這也是靜態(tài)導(dǎo)入用到正確地方所帶來的好處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澎埠,一起剝皮案震驚了整個濱河市逗栽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌失暂,老刑警劉巖彼宠,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弟塞,居然都是意外死亡凭峡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門决记,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摧冀,“玉大人,你說我怎么就攤上這事系宫∷靼海” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵扩借,是天一觀的道長椒惨。 經(jīng)常有香客問我,道長潮罪,這世上最難降的妖魔是什么康谆? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任领斥,我火速辦了婚禮,結(jié)果婚禮上沃暗,老公的妹妹穿的比我還像新娘月洛。我一直安慰自己,他們只是感情好孽锥,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布嚼黔。 她就那樣靜靜地躺著,像睡著了一般惜辑。 火紅的嫁衣襯著肌膚如雪隔崎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天韵丑,我揣著相機與錄音,去河邊找鬼虚缎。 笑死撵彻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的实牡。 我是一名探鬼主播陌僵,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼创坞!你這毒婦竟也來了碗短?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤题涨,失蹤者是張志新(化名)和其女友劉穎偎谁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲堵,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡巡雨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了席函。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铐望。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茂附,靈堂內(nèi)的尸體忽然破棺而出正蛙,到底是詐尸還是另有隱情,我是刑警寧澤营曼,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布乒验,位于F島的核電站,受9級特大地震影響蒂阱,放射性物質(zhì)發(fā)生泄漏徊件。R本人自食惡果不足惜奸攻,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虱痕。 院中可真熱鬧睹耐,春花似錦、人聲如沸部翘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽新思。三九已至窖梁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夹囚,已是汗流浹背纵刘。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荸哟,地道東北人假哎。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鞍历,于是被迫代替她去往敵國和親舵抹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容