JDK1.8常用新特性總結


    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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM