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

  

 

posted @ 2018-09-10 18:47  zlAdmin  阅读(2362)  评论(0编辑  收藏  举报