小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

jdk1.5新特性

 我是書迷705 2015-04-22

"JDK1.5"的一個(gè)重要主題就是通過新增一些特性來簡化開發(fā),這些特性包括泛型,for-each 循環(huán),自動(dòng)裝包/拆包,枚舉,可變參數(shù), 靜態(tài)導(dǎo)入 。使用這些特性有助于我們編寫更加清晰,精悍,安全的代碼。

自動(dòng)裝箱/拆箱(Autoboxing/unboxing)

自動(dòng)裝箱:基本類型自動(dòng)轉(zhuǎn)換為包裝類

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

package com.linjunlong.fun.jdk15;

 

import java.util.ArrayList;

 

 

/**

 * 功能:自動(dòng)裝箱/拆箱

 * 編譯器自動(dòng)進(jìn)行基本類型和對應(yīng)的包裝類型進(jìn)行轉(zhuǎn)換

 * byte      <-->   Byte

 * short     <-->   Short

 * int       <-->   Integer

 * long      <-->   Long

 * float     <-->   Float

 * double    <-->   Double

 * char      <-->   Character

 * boolean   <-->   Boolean

 

 * @author linjunlong.com

 */

public class AutoBoxingOrUnBoxing {

     

    /**

     * 這里我們以Integer為實(shí)例

     */

    public void jdk14() {

        //jdk1.4,初始話一個(gè)值類型對應(yīng)的包裝類,你需要這么寫

        Integer integer = new Integer(1);

        int i = integer.intValue();

        //如果你需要在數(shù)組中添加一個(gè)數(shù)值類型的話,你還需要把他轉(zhuǎn)成基礎(chǔ)類型

        new ArrayList().add(new Integer(i));

    }

     

    public void jdk15() {

        //jdk1.5中你可以這么寫; int --> Integer

        Integer integer = 1;

        // Integer --> int

        int  i = integer;

        //這里你可以直接添加數(shù)值類型

        new ArrayList().add(i);

    }

     

    public static void main(String[] args) {

        /*

         * 這里有一些有趣的特性,享元模式,

         * 經(jīng)過裝箱和解箱的對象只要大小在-128127之間(byte類型的范圍之間)

         * 都會(huì)在jvm內(nèi)存的對象緩存池里形成記錄,下次有裝箱和解箱行為的對象,

         * 都會(huì)直接指向這個(gè)緩存次里的對象

         */

         

        Integer num1 = 20;

        int num2 = new Integer(20);

        System.out.println( num1 == num2); //@answer1

        Integer int1 = new Integer(20);

        Integer int2 = new Integer(20);

        System.out.println( int1 == int2); //@answer2

        System.out.println(num1 == int1); //@answer3

        System.out.println(num1 == int1*1);//@answer4

         

         

        //->answer1:true num1num2都經(jīng)過了裝箱和解箱,都指向緩存池里的對象20

        //->answer2:false int1int2 沒經(jīng)過裝箱和解箱,2個(gè)是不同的對象,比較他們的引用地址肯定也不一樣

        //->ansewr3:false 一個(gè)在的引用地址指向緩存池,一個(gè)是指向?qū)ο?span lang="EN-US">[20]的引用地址2個(gè)也不相等

        //->answer4:true 后面int1經(jīng)過了解箱然后*1運(yùn)算,然后又裝箱成Integer類型,所以他的引用地址也是緩存池里的地址

    }

 

}

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

package com.linjunlong.fun.jdk15;

 

import static java.lang.Integer.*; //導(dǎo)入了Integer的所有靜態(tài)方法和靜態(tài)屬性

import static java.lang.Math.max;  //導(dǎo)入了Mathmax方法

 

/**

 * 功能:靜態(tài)導(dǎo)入

 * 你可以導(dǎo)入一些靜態(tài)方法和屬性來當(dāng)作類本身的方法和屬性一樣調(diào)用

 *

 * @author linjunlong.com

 */

public class StaticImports {

     

    /**

     * 這里我們以Integer的對象和方法為例

     */

    public void jdk14() {

        //jdk1.4中你基本上只能這么寫

        Math.max(Integer.MAX_VALUE, Integer.MIN_VALUE);

        Integer.parseInt("12");

    }

     

    public void jdk15() {

        //jdk1.5中你只要導(dǎo)入了相應(yīng)的對象和方法你就可以直接寫了

        max(MAX_VALUE, MIN_VALUE);

        parseInt("12");

    }

     

}

For-Each循環(huán)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

package com.linjunlong.fun.jdk15;

 

 

/**

 * 功能:ForEach循環(huán)

 *

 * @author linjunlong.com

 */

public class ForEach {

     

    /**

     * 例如在jdk1.4中,我們需要遍歷一個(gè)數(shù)組,或集合,用for循環(huán)的話,我們基本只能這么寫

     */

    public static void jdk14(String[] strs) {

        for(int i = 0,max = strs==null?0:strs.length

                ; i < max ; i ++) {

            System.out.print(strs[i]);

        }

    }

     

    public static void jdk15(String[] strs) {

        //jdk1.5中我們可以

        for(String s : strs) {

            System.out.print(s);

        }

    }

     

    public static void main(String[] args) {

        String[] strs = {"a","b","c"};

        ForEach.jdk14(strs);//abc

        ForEach.jdk15(strs);//abc

    }

     

}

可變長參數(shù)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

package com.linjunlong.fun.jdk15;

 

 

/**

 * 功能:可變長參數(shù)

 * 1、方法的參數(shù)是可以變長的

 * 2、可變長參數(shù)一定要是方法的最后一個(gè)參數(shù)

 *

 * @author linjunlong.com

 */

public class VariableArguments {

     

    /**

     * 例如在jdk14中,如果需要傳一堆字符串

     * 這么寫

     */

    public static void jdk14(String[] strs) {

        for(int i = 0,max = strs==null?0:strs.length

                ; i < max ; i ++) {

            System.out.print(strs[i]);

        }

    }

     

    /**

     * jdk1.5中,我們可以這么寫,注意String后面的3個(gè)點(diǎn)...

     * @param strs

     */

    public static void jdk15(String... strs) {

        for(int i = 0,max = strs==null?0:strs.length

                ; i < max ; i ++) {

            System.out.print(strs[i]);

        }

    }

     

    public static void main(String[] args) {

        String[] strs = {"a","b","c"};

        VariableArguments.jdk14(strs);//abc

        VariableArguments.jdk15(strs);//abc

        //jdk15還可以

        VariableArguments.jdk15("a","b","c");//abc

    }

     

}

枚舉

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

package com.linjunlong.fun.jdk15;

 

 

/**

 * 功能:枚舉

 * 枚舉類型,jdk1.5加入了一個(gè)新的關(guān)鍵字enmu,我們可以這樣來定義一個(gè)枚舉類型。

 *

 * @author linjunlong.com

 */

public class Enums {

     

    //這里用了靜態(tài)內(nèi)部類,只是為了方便寫例子

    public static enum Colors {

        Red,

        White,

        Blue

    }

     

    public static void main(String[] args) {

        //我們可以這樣使用枚舉

        Enums.Colors myColors = Enums.Colors.Red;

        System.out.println(myColors);

        for(Enums.Colors c : Enums.Colors.values()) {

            System.out.println(c);

        }

    }

}

泛型

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

package com.linjunlong.fun.jdk15;

 

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

 

/**

 * 功能:泛型

 * C++通過模板技術(shù)可以指定集合的元素類型,

 * Java1.5之前一直沒有相對應(yīng)的功能。

 * 一個(gè)集合可以放任何類型的對象,

 * 相應(yīng)地從集合里面拿對象的時(shí)候我們也不得不對他們進(jìn)行強(qiáng)制得類型轉(zhuǎn)換。

 * 猛虎引入了泛型,它允許指定集合里元素的類型,

 * 這樣你可以得到強(qiáng)類型在編譯時(shí)刻進(jìn)行類型檢查的好處。

 *

 * @author linjunlong.com

 */

public class Generic {

     

    public static void jdk14(){

        //相當(dāng)于15中的List<Object> list = new ArrayList<Object>();

        List list = new ArrayList();

        list.add("1");//我們現(xiàn)在在list中添加了一個(gè)字符串類型

        String s = (String)list.get(0);//需要強(qiáng)轉(zhuǎn)

        list.add(new Date());//我們還可以添加一個(gè)Date類型

    }

     

    public static void jdk15(){

        List<String> list = new ArrayList<String>();

        list.add("1");

        String s = list.get(0);//不需要強(qiáng)轉(zhuǎn)

        //list.add(new Date());//編譯不通過

    }

}

 


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多