Oracle公司已經收購了另外一家大型的中間件企業BEA公司,在完成對Sun公司的收購之后,Oracle公司分別從BEA和Sun中取得了目前三大商業虛擬機的其中兩個:JRockit和HotSpot,Oracle公司宣布在未來1~2年的時間內,將把這兩個優秀的虛擬機互相取長補短,2014年3月18日,Oracle公司發表Java SE 1.8;
JVM上:取消永久代PermGen取而代之的是元空間Metaspace;
JDK8常用新特性:
1:Optional
說明:Optional 類是一個可以為null的容器對象,Optional 類的引入很好的解決空指針異常。
1.1:OPtional實例的創建
//生成一個空實例 Optional<String> empty = Optional.empty(); //構造一個name的Optional Optional<String> name = Optional.of("name"); //生成一個null Optional<String> nullOptional = Optional.ofNullable(null);
這里可以看出:創建一個空的實例可以用Optional.empty()或者Optional.ofNullable(null),創建一個不為空的Optional實例用of()或者ofNullable,當結果無法確認是否為空的時候使用ofNullable();
1.2:訪問對象的值 get() 方法
你以為使用了Optional就可以避免NoSuchElementException異常,想太多:
那么問題來了,如果我們用ofNullable存儲了一個未知是否為空的對象怎么辦====>很快找到了isPresent()方法,點擊去可以看到有:
總結:從上可以看出,如果我們生成一個不為空的實例則可以使用of,如果不確認ofNullable,當使用ofNullable時候請注意判斷是否為空;
1.3 ifPresent()方法
使用isPresent方法的時候我們還看到了ifPresent方法,來玩一下
//生成一個空實例 Optional<String> emty = Optional.empty(); //構造一個name的Optional Optional<String> name = Optional.of("name"); if (emty.isPresent()){ System.out.println("不為空"); }else{ System.out.println("為空"); }
emty.ifPresent(s -> System.out.println("值為:" + s)); name.ifPresent(n -> System.out.println("值為:" + n));
結果大家都知道了,嘿嘿
1.4 orElse() 方法
String test = null;
String ss = Optional.ofNullable(test).orElse("hello word"); System.out.println(ss);
即如果test不為空則為test,如果沒有值則為“hello word”;
1.5 orElseGet()方法
orElseGet()方法同orElse方法,當使用orElse()方法的時候,無論設置初始值是否為空都會執行else方法;當使用orElseGet的時候,是注重獲取值,當初始不為空則slse不會執行;
1.6 orElseThrow() 方法
即當傳入對象為空的時候,拋出異常
//生成一個null String test = null; Optional.ofNullable(test).orElseThrow(() -> new NoSuchElementException());
1.7 map()
//生成一個null String test = null; String email = Optional.ofNullable(test) .map(n -> n).orElse("ssss");
1.8 filter()
Optional<String> result = Optional.ofNullable("name@123") .filter(u -> u != null && u.contains("@")); System.out.println(result.isPresent()); ======>true