设为首页 加入收藏

TOP

Java 11的8个新特性(一)
2018-12-02 22:09:09 】 浏览:28
Tags:Java 特性

Java 11又出新版本了,我还在Java8上停着。不过这也挡不住我对他的热爱,忍不住查看了一下他的新性能,由于自己知识有限,只总结了以下八个特性;


1、本地变量类型推断


什么是局部变量类型推断?


    var javastack = "javastack";
    System.out.println(javastack);


大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,如上面的 String 。


    var javastack = "javastack";
    就等于:
    String javastack = "javastack";


2、字符串加强


Java 11 增加了一系列的字符串处理方法,如以下所示。


    // 判断字符串是否为空白
    " ".isBlank(); // true
    // 去除首尾空格
    " Javastack ".strip(); // "Javastack"
    // 去除尾部空格
    " Javastack ".stripTrailing(); // " Javastack"
    // 去除首部空格
    " Javastack ".stripLeading(); // "Javastack "
    // 复制字符串
    "Java".repeat(3);// "JavaJavaJava"
    // 行数统计
    "A\nB\nC".lines().count(); // 3


3、集合加强


自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。


示例1:


示例2:


    var list = new ArrayList<String>();
    var copy = List.copyOf(list);
    System.out.println(list == copy); // false


示例1和2代码差不多,为什么一个为true,一个为false?


来看下它们的源码:


    static <E> List<E> of(E... elements) {
      switch (elements.length) { // implicit null check of elements
        case 0:
            return ImmutableCollections.emptyList();
        case 1:
            return new ImmutableCollections.List12<>(elements[0]);
        case 2:
            return new ImmutableCollections.List12<>(elements[0], elements[1]);
        default:
            return new ImmutableCollections.ListN<>(elements);
      }
    }
    static <E> List<E> copyOf(Collection<? extends E> coll) {
        return ImmutableCollections.listCopy(coll);
    }
    static <E> List<E> listCopy(Collection<? extends E> coll) {
        if (coll instanceof AbstractImmutableList && coll.getClass() != SubList.class) {
            return (List<E>)coll;
        } else {
            return (List<E>)List.of(coll.toArray());
        }
    }


可以看出 copyOf 方法会先判断来源集合是不是 AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创建一个新的集合。


示例2因为用的 new 创建的集合,不属于不可变 AbstractImmutableList 类的子类,所以 copyOf 方法又创建了一个新的实例,所以为false.


注意:使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。


上面演示了 List 的 of 和 copyOf 方法,Set 和 Map 接口都有。


4、Stream 加强


Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。


1) 增加单个参数构造方法,可为null


Stream.ofNullable(null).count(); // 0


2) 增加 takeWhile 和 dropWhile 方法


    Stream.of(1, 2, 3, 2, 1)
    .takeWhile(n -> n < 3)
    .collect(Collectors.toList()); // [1, 2]


从开始计算,当 n < 3 时就截止。


    Stream.of(1, 2, 3, 2, 1)
    .dropWhile(n -> n < 3)
    .collect(Coll
编程开发网

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 11 初次体验有感 下一篇C语言求水仙花数代码解析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }