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>表示包括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