1. 程式人生 > >JDK新特性(1.5,1.7,1.8)

JDK新特性(1.5,1.7,1.8)

1.5

1.包裝器(自動裝箱拆箱)

包裝器有Double,Float,Long,Integer,Short,Character和Boolean

自動裝箱,只需將該值賦給一個型別包裝器引用,java會自動建立一個物件。

自動拆箱,只需將該物件值賦給一個基本型別即可

2.可變長引數

3.泛型

Basic<T>和Basic<E>中T和E只是標誌位(語義化為:Type和Element簡寫或者其他簡寫),本質上是可以使用A,B任意替換

泛型中? super T和? extends T的區別

<? super T>表示包括T在內的任何T的父類,<? extends T>表示包括T在內的任何T的子類(具體請自行查閱

)

1)泛型使用(建立List中僅可以存放指定string型別資料)

2)?萬用字元

下面這句程式碼,我趕腳很有深度和使用意義(泛型:僅僅是型別的限制,不包含任何實際意義)

4.foreach(增強for)

5.靜態引入(本類中呼叫其他類中中所有靜態成員->[格式:import static 包名.類名.靜態的成員;])

1.7

1.switch可以使用String

2.型別自動推斷

// Pre-JDK 7

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

// JDK 7

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

3.對Java集合(Collections)的增強支援

關於jdk1.7中集合新特性無法使用的問題->此特性純屬無稽之談(經測試,無效) 
4.一個catch可以寫多個異常型別
try {  ......  } catch(ClassNotFoundException | SQLException ex) {

     ex.printStackTrace();

}

1.8

1.Lambda 表示式

格式:左側引數 -> 右側函式體

語法格式一:無引數,無返回值
()->System.out.println(“Hello Lambda!”);

語法格式二:lambda表示式的引數列表的資料型別可以省略不寫,因為JVM編譯器通過型別推斷

(x , y) -> Integer.compare(x, y);

語法格式三:若只有一個引數,()可以省略不寫

x->System.out.println(“Hello Lambda!”);

2.函式式介面(方法形參可以是介面)

類似於如下結構

1)介面@FunctionalInterface註解修飾

2)有且僅有一個抽象方法(Object的public方法除外),但是可以有多個非抽象方法的介面,如果需要多個抽象方法(default關鍵字)

為什麼這麼麻煩來調整interface介面呢?肯定有很大的好處的

函式式介面的一大特性:可以lambda表示式和函式引用表示式代替。也就是說宣告這樣的介面,是可以靈活的以方法來傳參

Java8 內建的四大核心函式式介面

1)斷言式介面predicate(過濾陣列

2)Function:函式式介面(處理字串)

3)Supplier:供給型介面

4)Consumer:消費型介面

3.方法引用 [::] (個人感覺::就相當於方法呼叫的.

如下圖所示 

()->{System.out::println("方法呼叫")};    //本句只是提供演示意思並不可以單獨執行

4.STREAM

參考:http://www.runoob.com/java/java8-streams.html