Java 11 新特性

Java 11 新特性
摘要由CSDN通过智能技术生成

概述

在 Java 11 中,自 2018 年 9 月 25 日发布了切换到六个月发布周期以来 JDK 的第一个长期支持 (LTS) 版本。“长期支持”意味着 Oracle 将为该版本提供安全性补丁好几年了。

Java 11 之前的一个 LTS 版本是 Java 8,所以 Java 9 和 10 不是 LTS 版本,这意味着对这些版本的支持在每个后续版本中都停止了。

根据与开发人员的相关性,我们对 Java 11 中的新特性进行了重写整理讲解。首先是语言本身的变化。其次是对 JDK 类库、工具和实验特性的增强。 最后,弃用、删除和其他细微更改。

同样重要的是要知道,从版本 11 开始,Oracle JDK 只能由开发人员免费使用。公司需要与 Oracle 签订有偿支持合同。另一方面,OpenJDK 11 可供所有人免费使用。

Lambda 参数的局部变量语法 (JEP 323)

JEP 323 允许在隐式类型 lambda 表达式的参数中使用“var”。

什么是隐式类型的 lambda 表达式?

让我们从显式类型的 lambda 表达式开始。在以下示例中,显式表示指定了 lambda 参数 l 和 s 的数据类型,即 List 和 String:

(List<String> l, String s) -> l.add(s);

但是,编译器也可以从上下文派生类型,因此也允许使用以下 - 隐式类型 - 表示法:

(List<String> l, String s) -> l.add(s);

从 Java 11 开始,我们可以使用 Java 10 中引入的“var”关键字来代替显式类型:

(var l, var s) -> l.add(s);

但是当你可以完全省略类型时,为什么要写“var”,就像前面的例子一样?

原因是注解。如果要对变量进行注解,则必须将注解放在类型上——显式类型或“var”。不允许在变量名上放置注释。

如果你想在上面的例子中注解变量,到目前为止只有下面的符号是可能的:

(@Nonnull List<String> l, @Nullable String s) -> l.add(s);

Java 11 现在还允许使用“var”:

(@Nonnull var l, @Nullable var s) -> l.add(s);

不同的符号不得混用。这意味着我们必须为所有变量指定类型,省略所有类型,或者对所有变量使用“var”。

我们最终选择哪种形式取决于特定情况下的可读性和团队的风格。

HTTP 客户端(标准)(JEP 321)

在 Java 11 之前,使用原生 JDK 资源,例如通过 HTTP POST 发送数据需要大量代码。

(以下示例使用 Java 8 中添加的 BufferedReader.lines() 将响应作为 Stream 读取并使用收集器将其组合为 String。在 Java 8 之前,这需要多行。)

public String post(String url, String data) throws IOException {
   
  URL urlObj = new URL(url);
  HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
  con.setRequestMethod("POST");
  con.setRequestProperty("Content-Type", "application/json");

  // Send data
  con.setDoOutput(true);
  try (OutputStream os = con.getOutputStream()) {
   
    byte[] input = data.getBytes(StandardCharsets.UTF_8);
    os.write(input, 0, input.length);
  }

  // Handle HTTP errors
  if (con.getResponseCode() != 200) {
   
    con.disconnect();
    throw new IOException("HTTP response status: " + con.getResponseCode());
  }

  // Read response
  String body;
  try (InputStreamReader isr = new InputStreamReader(con.getInputStream());
      BufferedReader br = n
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值