MyEclipse CI 2019.4.0安装包下载

美国时间 09 月 25 日,Oralce正式发布了Java 11,这是据Java 8以后支持的首个长期版本。从官方发布的支持路线图表看出,Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。现在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,现在 Java 11 长期支持,也已经包含了 9 和 10 的全部功能。那么我们一起来看下从 Java 9 - 11 都有哪些重要的新特性呢?

一、本地变量类型推断

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

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

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

var javastack = "javastack";

就等于:

String javastack = "javastack";

二、字符串加强

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

// 判断字符串是否为空白

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

三、集合加强

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

示例1:

var list = List.of("Java", "Python", "C");

  var copy = List.copyOf(list);
System.out.println(list == copy);  // true

示例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 接口都有。

四、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(Collectors.toList());  // [3, 2, 1]

这个和上面的相反,一旦 n < 3 不成立就开始计算。

3. iterate重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。如果你对 JDK 8 中的 Stream 还不熟悉,可以自行百度下教程。

五、Optional 加强

Opthonal 也增加了几个非常酷的方法,现在可以很方便的将一个 Optional 转换成一个 Stream, 或者当一个空 Optional 时给它一个替代的。

Optional.of("javastack").orElseThrow();     // javastack

  Optional.of("javastack").stream().count();  // 1

  Optional.ofNullable(null)

      .or(() -> Optional.of("javastack"))
    .get();   // javastack

六、InputStream 加强

InputStream 终于有了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream,这是在处理原始数据流时非常常见的一种用法,如下示例。

var classLoader = ClassLoader.getSystemClassLoader();

  var inputStream = classLoader.getResourceAsStream("javastack.txt");

  var javastack = File.createTempFile("javastack2", "txt");

  try (var outputStream = new FileOutputStream(javastack)) {

      inputStream.transferTo(outputStream);
}

七、HTTP Client API

这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。来看一下 HTTP Client 的用法:

var request = HttpRequest.newBuilder()

      .uri(URI.create("https://javastack.cn"))

      .GET()

      .build();

  var client = HttpClient.newHttpClient();
     // 同步   HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());   System.out.println(response.body());
     // 异步   client.sendAsync(request, HttpResponse.BodyHandlers.ofString())       .thenApply(HttpResponse::body)

上面的 .GET() 可以省略,默认请求方式为 Get!现在 Java 自带了这个 HTTP Client API,我们以后还有必要用 Apache 的 HttpClient 工具包吗?

八、化繁为简,一个命令编译运行源代码

看下面的代码:

// 编译
 javac Javastack.java
 
 // 运行
java Javastack

在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。

本文转载自csdn-代码风

MyEclipse 最新动态尽在MyEclipse官方中文网!

Java 11必掌握的8大特性,完美代码信手拈来的更多相关文章

  1. Java 11 这 8 个逆天新特性教你写出更牛逼的代码!

    美国时间2018年 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Jav ...

  2. jdk8十大特性并代码demo(转)

    一.十大特性 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 4.方法引用,与Lambda表达式联合使用 5.引入重复注解 6.类型注解 7.最新的Da ...

  3. 一线大厂Java面试必问的2大类Tomcat调优

    一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍 ...

  4. 【整理】Java 11新特性总结

    闲语 2018年9月25日,Java 11正式发布,与JDK 10不同,JDK 11将提供长期支持,还将作为Java平台的参考实现以及标准版(Java SE)11.Oracle直到2023年9月都会为 ...

  5. Java 11正式发布,这几个逆天新特性教你写出更牛逼的代码

    就在前段时间,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用! 这无疑对我们来说是一大好的消息.作为一名java开发者来说,虽然又要去学习和了解java11 ...

  6. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  7. java的3大特性

    java的3大特性 1.继承: * 继承是从已有类得到继承信息创建新类的过程. * 提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类). * 继承让变化中的软件系统有定的延 ...

  8. Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

    美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本. 为什么说是长期版本,看下面的官方发布的支持路线图表. 可以看出 Java 8 扩 ...

  9. 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

随机推荐

  1. python接口测试之mock(三)

    前面介绍了moco的详细的使用,它主要是基于moco-runner-0.11.0-standalone.jar,通过编写json的文件来实现,mock翻译过来就是模拟的意思,也就是说,它是将测试对象所 ...

  2. 63不同路径II

    题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”).现在考 ...

  3. 配置pip镜像源(转)

    使用pip安装python扩展时,如若没有配置国内镜像源,在未翻墙的情况下,其下载速度将会特别缓慢.因此,有些时候我们必须使用国内镜像源,来解决pip下载安装速度慢的问题,比较常用的国内镜像包括: 阿 ...

  4. Python学习之协程

    8.8 协程 ​ 我们都知道线程间的任务切换是由操作系统来控制的,而协程的出现,就是为了减少操作系统的开销,由协程来自己控制任务的切换 ​ 协程本质上就是线程.既然能够切换任务,所以线程有两个最基本的 ...

  5. html+css实现奥运五环(环环相扣)

    <!DOCTYPE html> <html> <head> <title>奥运五环</title> <style type=" ...

  6. 【Deep Learning Nanodegree Foundation笔记】第 0 课:课程计划

    第一周 机器学习的类型,以及何时使用机器学习 我们将首先简单介绍线性回归和机器学习.这将让你熟悉这些领域的常用术语,你需要了解的技术进展,并了解深度学习在更大的机器学习背景中的位置. 直播:线性回归 ...

  7. 【PyTorch】计算局部相似矩阵

    计算局部相似矩阵 代码文档:https://github.com/lartpang/mypython/blob/master/2019-09-25%E8%AE%A1%E7%AE%97%E5%B1%80 ...

  8. Python示例-TCP Port Scan

    import socket import threading # target host address host = "127.0.0.1" # thread list thre ...

  9. [转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)

    无法关闭 ESXi 主机上的虚拟机 (1014165) https://kb.vmware.com/s/article/1014165?lang=zh_CN Last Updated: 4/17/20 ...

  10. 另一种分页器 不依赖Paginator模块的方法

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...