java7和java8特性

JDK 1.7部分新特性
1)switch支持String類型 本質上是對int類型的匹配,
實現原理爲:通過case後面的str對象調用hashcode()方法,得到一個int類型的hash值,然後用這個hash值來唯一標識這個case.當匹配時,首先調用這個字符串的hashcode()方法,獲得一個hash值,用這個hash值與case匹配,若沒有則不存在,若有則接着調用equals()方法進行匹配。String變量不能爲null ,case後的字符串也不能爲null ,否則會出現NullPointerException.
2)可以在catch中捕獲多個異常
3)對數值字面量進行了改進

  • 增加了二進制字面量的表示 0B001 0b001
  • 在數字中可以添加分隔符 123_456 下劃線只能用在數字中間 編譯時被去掉

4)使用泛型的時候增加了類型推斷機制
java7之前
Map<String,String> map = new HashMap<String,String>();
java7引進類型推斷後
Map<String,String> map = new HashMap<>();

5)增加了 try-with-resources語句 (聲明一個或多個資源的try語句)
資源指在使用完成後,必須關閉釋放的對象,try-with-resources語句確保在該語句執行之後關閉每個資源

  try(InputStream fis = new FileInputStrean("input.txt");){
    while(fis.read()!=1){
    System.out.println(fis.read());     
}
}catch(Exception e){
    e.printStackTrace();
}

6)增加了fork/join框架來增強對處理多核並行計算的支持
http://ifeve.com/talk-concurrency-forkjoin/(詳述了 fork 和 join框架)
應用場景:如果一應用能被分解爲多個子任務 並且組合多個子任務的結果就能獲得最終答案
fork把大任務分割 join合併計算結果

JDK 1.8 部分新特性
1)增加了 Lambda表達式的支持 Lambda表達式是一個匿名函數 允許把函數作爲一個方法的參數
示例

Arrays.AsList(2,8,1).forEach(i->System.out.println(i)); //1
Arrays.AsList(2,8,1).forEach((Integer i)->System.out.println(i));  // 2

在java8以前 對於列表的排序 如果有自定義的類 則需要制定自定義的排序方法

Person []people = {new Person("Iack",22),new Person("Tony",35)};
Arrays.sort(people,new Comparator<Person>(){
//自定義排序方法 new 一個Conparator 重寫compare方法
    @Override
    public int compare(Person a,Person b){
    return a.getAge()-b.getAge();
    }
});
for(Person p:people){
    System.out.println(p);
}

Lambda表達式

Arrays.sort(people,(Person a,Person b)->a.getAge()-b.getAge());
Arrays.sort(people,(a,b)->a.getAge()-b.getAge());

Lambda表達式是通過函數式接口實現的 (只有一個方法的普通接口)。函數式接口可以隱式的轉換爲Lambda表達式,爲了與普通的接口區分開,增加了註解@FunctionalInterface

@FunctionalInterface
interface fun{
    void f();
}

2)接口增加了方法的默認實現和靜態方法 JDK1.8通過使用關鍵字 default可以給接口中的方法添加默認實現,此外,接口中還可以定義靜態方法。

interface In8{
    void f();
    default void g(){
    System.out.println("default");
    }
    static void h(){
    System.out.println("static");
    }
}

引入接口默認方法實現 是爲了實現接口升級 在原有的設計中,如果想要升級接口,例如給接口中添加一個新的方法,會導致所有實現這個接口的類都需要被修改。

3)方法引用 方法引用指的是可以直接使用java類或對象的方法

Arrays.sort(people,Comparator.comparing(Person::getAge));

方法引用共有下面四種方式

  1. 引用構造方法 ClassName::new
  2. 引用類靜態方法 ClassName::methodName
  3. 引用特定類的任意對象方法 ClassName::methodName
  4. 引用某個對象的方法 instanceName::methodName

4)註解

  1. JDK 1.5中引入了註解機制 但有限制 相同註解在同一位置只能聲明一次 JDK 1.8中引入了重複註解機制後,相同的註解在同一個地方可以聲明多次
  2. 擴展註解使用範圍 可以給局部變量 泛型 和方法異常等提供註解

5)加強了類型推測機制
6)參數名字 在編譯時增加 -parameters選項 以及增加反射API 與 Parameter.getName()方法實現了獲取方法參數名的功能
7)新增optional類 處理空指針
8)新增Stream類 和函數式編程統一
9)日期新特性
10)增加了調用javaScript的引擎
11)Base64 字符編碼格式 用來作爲電子郵件 或webService附件的傳輸編碼
12)並行數組

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章