关于java8:谈谈Java818引入的新特性

2次阅读

共计 2903 个字符,预计需要花费 8 分钟才能阅读完成。

Java8 于 2014 年 3 月 18 日公布,截止到 2022 年 4 月 6 日,以后最新发行版本是 Java18。版本 17、11 和 8 是目前反对的长期反对 (LTS) 版本。这篇文章率领大家回顾从 Java 8 开始每个版本的个性,小板凳坐好,发车了!

版本概览
Java8 LTS 上一次商业用途的免费软件公共更新是在 2019 年 1 月由 Oracle 公布的,而 Oracle 持续更新并公布收费的公共 java8,用于开发和集体用处。java7 不再受公众反对。对于 java11,Oracle 不会为公众提供长期反对; 相同,更宽泛的 OpenJDK 社区,如 Eclipse Adoptium 或其余社区,将会代替 Oracle 提供这类的反对。

上图展现了从 Java SE 8 开始到 Java SE 18 的历史版本公布过程,秉着 2017 年 9 月,Java 平台的首席架构师 Mark Reinhold 提议将公布列车改为“每六个月公布一个个性”的约定,也给出了将来到 Java SE 21 的公布布局。

Java18 的个别可用性开始于 2022 年 3 月 22 日,最新的(第三次) LTS Java 17 开始于 2021 年 9 月 14 日。java19 正在开发中,晚期拜访构建曾经可用。

Java 8 个性
Lambda 表达式容许咱们应用函数作为办法参数。

让咱们来看看 Java 8 之前的代码,过后咱们必须创立一个匿名类来实现一个简略的接口。

Thread t = new Thread(new Runnable() {public void run() {System.out.println("Start thread");
 }
});
复制代码

应用 lambda 表达式,咱们能够这样做。

Thread t1 = new Thread(() -> {System.out.println("Start 1st thread");
});
复制代码

函数接口是只有一个形象办法的接口。此外,Interface 能够有默认办法和静态方法,但只有一个形象办法。

Stream 是 java.util.Stream 包中的一个接口,它提供了对汇合执行程序和并行操作的办法。Collection Interface 的 Stream ()办法返回给定汇合的类型为 Stream 的元素流。流接口反对过滤、映射或查找流中元素的聚合后果所需的许多操作。

在上面的实例,咱们调用 List 上的 stream ()办法,而后将 Predicate (Functional Interface)传递给返回布尔值的 anyMatch ()办法。

List<String> colors = new ArrayList<>(Arrays.asList("Green","Yellow","Red"));
boolean isTrue = colors.stream().anyMatch(x -> x.equals("Red"));
System.out.println(isTrue);
复制代码

Optional 可创立一个容器对象,该对象可能蕴含也可能不蕴含非空值,通过应用 它,咱们能够 isPresent ()来查看一个值是否为非空。

在上面的示例中,咱们应用 Stream Interface 的 findAny ()办法返回一个 Optional 对象。基于可选实例的值,咱们能够执行相应的逻辑。

List<String> colors = new ArrayList<>(Arrays.asList("Green","Yellow","Red"));
Optional<String> color = colors.stream().filter(x -> x.equals("Black")).findAny();
System.out.println(color.isPresent()? color.get() : "Not Found");
复制代码

对 java.util.concurrent 包的更改:

引入了 Interface CompletionStage、Class CompletableFuture 和 CompletionException。
CompletableFuture 能够帮忙执行异步工作,这些工作比在 java8 之前存在的 Future 对象更加灵便和加强。
Method References (::),咱们能够应用双冒号来调用现有的办法,而不是应用 lambda 表达式。办法援用能够用来援用静态方法和实例办法。

上面演示一个援用静态方法的示例。首先,让咱们应用 lambda 表达式实现一个办法调用。

public class Main {public static void main(String[] args)  {List<Integer> locList = new ArrayList<>(Arrays.asList(1,2,5,6));
     boolean isFound = locList.stream().anyMatch(l -> isEqual(l));
     System.out.println(isFound);
    }
    public static <T> boolean isEqual(T a) {Predicate<T> isEqual = (x) -> x.equals(5);
    return isEqual.test(a);
    }
}
复制代码

isEqual ()是 Main 类中的一个静态方法,因而咱们能够简略地应用办法援用来实现工作,而不是应用 lambda 表达式来调用该办法。

public class Main {

public static void main(String[] args)  {List<Integer> locList = new ArrayList<>(Arrays.asList(1,2,5,6));
 boolean isFound = locList.stream().anyMatch(Main::isEqual);
 System.out.println(isFound);
}
public static <T> boolean isEqual(T a) {Predicate<T> isEqual = (x) -> x.equals(5);
 return isEqual.test(a);
}

}
复制代码
篇幅无限,除了下面讲到的新特色,还有几个重要的,包含当不限于:

Parallel Array Sorting(并发数组排序)
Date & Time API(日期和工夫操作接口,LocalDate,ZoneId,Clock)
Base64 encoding and decoding(Base64 编码和解码自反对)
Permanent Generation(Metaspace 将依据咱们在运行时的需要来从新调整自身)
未完待续,上面持续讲各个版本的新个性,敬请期待!

最初
如果你感觉此文对你有一丁点帮忙,点个赞。或者能够退出我的开发交换群:1025263163 互相学习,咱们会有业余的技术答疑解惑

如果你感觉这篇文章对你有点用的话,麻烦请给咱们的开源我的项目点点 star:http://github.crmeb.net/u/defu 不胜感激!

残缺源码下载地址:https://market.cloud.tencent….

PHP 学习手册:https://doc.crmeb.com
技术交换论坛:https://q.crmeb.com

正文完
 0