<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 17  文章 - 49  trackbacks - 0
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類(17)

    隨筆檔案(17)

    相冊(cè)

    最新隨筆

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    ?

    道虎紋: 參數(shù) 機(jī)制

    ?

    管中窺虎

    在學(xué)習(xí) java 1.5 的過(guò)程中,我使用了 sun 公布的 tutorial ,這份文檔寫的比較詳盡易明,但是對(duì)于想快速了解 tiger 而且具有較好 java 基礎(chǔ)的人來(lái)說(shuō),大篇幅的英文文檔是比較耗時(shí)間和非必需的,所以我將會(huì)歸納這份文檔的主要內(nèi)容,在保證理解的底線上,盡力減少閱讀者需要的時(shí)間。

    ?

    在以下地址可以進(jìn)入各新增語(yǔ)言特色介紹以及下載相關(guān)文檔(若有)。

    http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

    ?

    2006 8 17 星期四

    Varargs

    (理解為 var-args 可變參數(shù))

    在以前的版本里,一個(gè)接納多個(gè)參數(shù)的方法,在調(diào)用前就需要用創(chuàng)建一個(gè)數(shù)組來(lái)放入這些參數(shù),例如:

    Object[]?arguments? = ?{

    ????
    new ?Integer( 7 ),

    ????
    new ?Date(),

    ????
    " a?disturbance?in?the?Force "

    };

    ?

    String?result?
    = ?MessageFormat.format(

    ????
    " At?{1,time}?on?{1,date},?there?was?{2}?on?planet? "

    ?????
    + ? " {0,number,integer}. " ,?arguments);

    現(xiàn)在依然必須這么傳遞,但varargs自動(dòng)化并隱藏了這些步驟,而且還與已有的API兼容。之前的那個(gè)例子里,MessageFormat.format現(xiàn)在有了這樣的聲明:

    public ? static ?String?format(String?pattern,

    ????????????????????????????????Object?arguments);

    在最后一個(gè)參數(shù)的類型后面的那三個(gè)句號(hào),說(shuō)明了這個(gè)參數(shù)可以傳入一個(gè)數(shù)組或者一串參數(shù)。注意只能是最后那個(gè)參數(shù)才能有這種用法。現(xiàn)在這個(gè)方法可以這樣引用:

    String?result? = ?MessageFormat.format(

    ????
    " At?{1,time}?on?{1,date},?there?was?{2}?on?planet? "

    ????
    + ? " {0,number,integer}. " ,

    ????
    7 ,? new ?Date(),? " a?disturbance?in?the?Force " );

    ?

    Autoboxing varargs有著很強(qiáng)的配合關(guān)系,看看下面這些代碼:

    ?

    // ?Simple?test?framework

    public ? class ?Test? {

    ????
    public ? static ? void ?main(String[]?args)? {

    ????????
    int ?passed? = ? 0 ;

    ????????
    int ?failed? = ? 0 ;

    ????????
    for ?(String?className?:?args)? {

    ????????????
    try ? {

    ????????????????Class?c?
    = ?Class.forName(className);

    ????????????????c.getMethod(
    " test " ).invoke(c.newInstance());

    ????????????????passed
    ++ ;

    ????????????}
    ? catch ?(Exception?ex)? {

    ????????????????System.out.printf(
    " %s?failed:?%s%n " ,?className,?ex);

    ????????????????failed
    ++ ;

    ????????????}


    ????????}


    ????????System.out.printf(
    " passed=%d;?failed=%d%n " ,?passed,?failed);

    ????}


    }


    ?

    這個(gè)小程序可能是最小型的完整的測(cè)試框架了。getMethodprintf方法由于varargs的緣故而不需要聲明數(shù)組來(lái)傳參了。代碼比以前會(huì)清潔很多。

    什么時(shí)候該用?作為客戶端的話大可以好好利用,只要api里有提供,事實(shí)上java的核心api里的反射,信息格式化,和新的printf都用了varargs。而作為api的設(shè)計(jì)者,則應(yīng)該謹(jǐn)慎地使用,只有你感覺到很有效果的時(shí)候才采取。總的來(lái)說(shuō),不要重載帶varargs的方法,否則客戶端程序員會(huì)很困惑哪個(gè)方法是被調(diào)用了。

    posted on 2006-08-17 18:09 Ye Yiliang 閱讀(1180) 評(píng)論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲av无码成人精品区一本二本| 国产av无码专区亚洲av毛片搜| 亚洲国产精品一区二区三区久久 | 毛片免费在线观看网址| 精精国产www视频在线观看免费| 亚洲人成网站18禁止| 亚洲AV无码精品色午夜果冻不卡 | 亚洲天堂在线视频| 在线免费观看毛片网站| 午夜免费福利视频| 一区二区三区免费视频网站 | 最近中文字幕无吗免费高清| 久久99毛片免费观看不卡| 成年免费a级毛片| 亚洲6080yy久久无码产自国产| 成人最新午夜免费视频| 色婷婷六月亚洲婷婷丁香| 亚洲AV无码之国产精品| 亚洲嫩草影院久久精品| 午夜免费国产体验区免费的| 毛片视频免费观看| 亚洲宅男永久在线| 免费观看男人吊女人视频| 日韩一区二区三区免费体验| 亚洲宅男天堂a在线| 99re6在线视频精品免费| 亚洲精品成人网久久久久久| 国产成人精品久久亚洲高清不卡 | 国产jizzjizz免费视频| 91精品国产免费入口| 国精产品一区一区三区免费视频 | 四虎AV永久在线精品免费观看| 猫咪社区免费资源在线观看| 国产91免费在线观看| 亚洲免费在线观看视频| 最近免费最新高清中文字幕韩国| 免费国产黄网站在线观看视频 | 亚洲国产精品一区二区第一页| 深夜福利在线视频免费| 亚洲?v女人的天堂在线观看| 国产精品亚洲二区在线|