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

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

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

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    JDK1.5新特性介紹

    下面我們簡單介紹一下JDK1.5的新特性。

      1.泛型(Generic)

      C++通過模板技術(shù)可以指定集合的元素類型,而Java在1.5之前一直沒有相對應(yīng)的功能。一個(gè)集合可以放任何類型的對象,相應(yīng)地從集合里面拿對象的時(shí)候我們也不得不對他們進(jìn)行強(qiáng)制得類型轉(zhuǎn)換。猛虎引入了泛型,它允許指定集合里元素的類型,這樣你可以得到強(qiáng)類型在編譯時(shí)刻進(jìn)行類型檢查的好處。
           

        類型參數(shù)

        與尖括號有關(guān)的一些東西是JDK 5引入的新東西, 它們是List和Iterator接口的"形式的類型參數(shù)"(簡稱"類型形參")聲明.而在對泛型聲明List進(jìn)行調(diào)用時(shí)(例如: List<Integer>), 所有出現(xiàn)的類型形參(如 E)的地方, 都會(huì)被"實(shí)際的類型參數(shù)"(簡稱"類型實(shí)參", 如 Integer)所替換掉.

        雖然與C++中的模板機(jī)制在形式上很想像, 但必需注意, Java中的泛型聲明決不會(huì)在調(diào)用時(shí)被展成多份副本: 不論是在源碼級, 二進(jìn)制級, 還是在磁盤或內(nèi)存中, 都不會(huì)被展開!

        泛型聲明只會(huì)也只需編譯一次, 并生成一個(gè)類文件(class文件), 這一點(diǎn)跟普通的類或接口完全一樣.

        類型參數(shù)其實(shí)跟方法或構(gòu)造器中所用的通常參數(shù)相類似. 一個(gè)方法中可以聲明它用以處理的"形式的值參數(shù)", 相似地, 泛型聲明也有其"形式的類型參數(shù)"; 當(dāng)方法被調(diào)用時(shí), 實(shí)際參數(shù)會(huì)替換形式參數(shù), 然后執(zhí)行方法體, 同樣, 當(dāng)泛型聲明被調(diào)用時(shí), 實(shí)際的類型參數(shù)會(huì)替換掉形式的類型參數(shù).

        關(guān)于命名約定的備注: 推薦使用精煉而簡明(如, 單個(gè)字符)的方式為形式的類型參數(shù)命名. 最好避免使用小寫字符, 以便與普通的類或接口的參數(shù)相區(qū)分開來. 許多宣傳品類型使用 E 表示其元素的類型形參.

    Collection<String> c = new ArrayList();
    c.add(new Date());


      編譯器會(huì)給出一個(gè)錯(cuò)誤:

    add(java.lang.String) in java.util.Collection<java.lang.String> cannot be applied to (java.util.Date)


      2.For-Each循環(huán)

      For-Each循環(huán)得加入簡化了集合的遍歷。假設(shè)我們要遍歷一個(gè)集合對其中的元素進(jìn)行一些處理。典型的代碼為:

    void processAll(Collection c){
        for(Iterator i=c.iterator(); i.hasNext();){
            MyClass myObject = (MyClass)i.next();
            myObject.process();
        }
    }


      使用For-Each循環(huán),我們可以把代碼改寫成:

    void processAll(Collection<MyClass> c){
        for (MyClass  myObject :c)
            myObject.process();
    }


      這段代碼要比上面清晰許多,并且避免了強(qiáng)制類型轉(zhuǎn)換。

      3.自動(dòng)裝包/拆包(Autoboxing/unboxing)

      自動(dòng)裝包/拆包大大方便了基本類型數(shù)據(jù)和它們包裝類地使用。

      自動(dòng)裝包:基本類型自動(dòng)轉(zhuǎn)為包裝類.(int >> Integer)

      自動(dòng)拆包:包裝類自動(dòng)轉(zhuǎn)為基本類型.(Integer >> int)

      在JDK1.5之前,我們總是對集合不能存放基本類型而耿耿于懷,現(xiàn)在自動(dòng)轉(zhuǎn)換機(jī)制解決了我們的問題。

    int a = 3;
    Collection c = new ArrayList();
    c.add(a);//自動(dòng)轉(zhuǎn)換成Integer.

    Integer b = new Integer(2);
    c.add(b + 2);


      這里Integer先自動(dòng)轉(zhuǎn)換為int進(jìn)行加法運(yùn)算,然后int再次轉(zhuǎn)換為Integer.

      4.枚舉(Enums)

      JDK1.5加入了一個(gè)全新類型的“類”-枚舉類型。為此JDK1.5引入了一個(gè)新關(guān)鍵字enmu. 我們可以這樣來定義一個(gè)枚舉類型。
     

    public enum Color
    {
       Red,
       White,
       Blue
    }


      然后可以這樣來使用Color myColor = Color.Red.

      枚舉類型還提供了兩個(gè)有用的靜態(tài)方法values()和valueOf(). 我們可以很方便地使用它們,例如

    for (Color c : Color.values())
                System.out.println(c);


      5.可變參數(shù)(Varargs)

      可變參數(shù)使程序員可以聲明一個(gè)接受可變數(shù)目參數(shù)的方法。注意,可變參數(shù)必須是函數(shù)聲明中的最后一個(gè)參數(shù)。假設(shè)我們要寫一個(gè)簡單的方法打印一些對象,

    util.write(obj1);
    util.write(obj1,obj2);
    util.write(obj1,obj2,obj3);


      在JDK1.5之前,我們可以用重載來實(shí)現(xiàn),但是這樣就需要寫很多的重載函數(shù),顯得不是很有效。如果使用可變參數(shù)的話我們只需要一個(gè)函數(shù)就行了

    public void write(Object... objs) {
       for (Object obj: objs)
          System.out.println(obj);
    }


      在引入可變參數(shù)以后,Java的反射包也更加方便使用了。對于c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),現(xiàn)在我們可以這樣寫了c.getMethod("test").invoke(c.newInstance()),這樣的代碼比原來清楚了很多。 

      6.靜態(tài)導(dǎo)入(Static Imports)

      要使用用靜態(tài)成員(方法和變量)我們必須給出提供這個(gè)方法的類。使用靜態(tài)導(dǎo)入可以使被導(dǎo)入類的所有靜態(tài)變量和靜態(tài)方法在當(dāng)前類直接可見,使用這些靜態(tài)成員無需再給出他們的類名。

    import static java.lang.Math.*;
    …….
    r = sin(PI * 2); //無需再寫r = Math.sin(Math.PI);


      不過,過度使用這個(gè)特性也會(huì)一定程度上降低代碼地可讀性。

    posted on 2007-07-02 17:02 常言笑 閱讀(287) 評論(0)  編輯  收藏 所屬分類: 技術(shù)總結(jié)

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产做国产爱免费视频| 亚洲日韩国产二区无码| 苍井空亚洲精品AA片在线播放 | 亚洲欧美日韩中文二区| 久久免费看少妇高潮V片特黄| va亚洲va日韩不卡在线观看| 亚洲伊人tv综合网色| 国产精品亚洲精品日韩电影| 免费播放在线日本感人片| 亚洲国产精品无码久久久久久曰 | 精品国产免费一区二区三区| 亚洲大片免费观看| 久久精品亚洲视频| 在线看片免费人成视久网| 亚洲精品国产成人| 久久电影网午夜鲁丝片免费| 亚洲爆乳成av人在线视菜奈实| 免费观看四虎精品国产永久| av成人免费电影| 久久亚洲私人国产精品| 一个人免费观看视频www| 在线观看亚洲网站| 亚洲中久无码永久在线观看同| 国产啪精品视频网站免费尤物| 亚洲午夜视频在线观看| 最近高清国语中文在线观看免费 | 中文字幕在线日亚洲9| 免费人成在线观看播放国产 | 亚洲精品中文字幕无码蜜桃 | 在线观看免费成人| 又大又硬又粗又黄的视频免费看| 好看的电影网站亚洲一区| 99蜜桃在线观看免费视频网站| 中文字幕在线观看亚洲视频| 亚洲Av无码乱码在线观看性色| 九九精品成人免费国产片| 亚洲www在线观看| 亚洲综合区小说区激情区| 日本zzzzwww大片免费| 野花视频在线官网免费1| 久久精品国产亚洲AV麻豆网站|