,,Java 8 中的 10 个特性总结及详解

,,Java 8 中的 10 个特性总结及详解

本文主要介绍Java 8中的新特性。在此,我们整理了相关资料和10个特性,并一一介绍。感兴趣的朋友可以参考一下。

你之前听到的关于Java8的一切都围绕着lambda表达式。但这只是Java8的一部分。Java 8有许多新特性——一些强大的新类和语法,以及其他从一开始就应该有的东西。

我将介绍我认为值得了解的10个基本特征。其中至少会有一两个是你想尝试的,那就开始吧!

1. 默认方法

Java语言的一个新特性是,你可以给接口的方法添加方法体(称为默认方法)。这些方法将被隐式添加到实现该接口的类中。

这使您能够在不破坏代码的情况下向现有库中添加新函数。这显然是一个进步。但另一方面会混淆接口和类的界限,因为接口是用来定义契约的,而类是用来定义具体实现的。从积极的方面来看,它将以优雅的方式使界面更加智能,并避免库的重复和扩展。但是消极的一面是,我们将在后面看到接口方法必须对此进行查询并将其转换成具体的类。石狮

2. 进程终止

启动一个外部进程是你要做的事情的一半——当这个进程崩溃、挂起或者消耗100%的CPU时,你必须回来调试它。现在,process类配备了两个新方法来帮助您控制难以控制的流程。

第一个是isAlive(),它允许您检查一个进程是否仍在运行,而无需等待它完成运行。第二个更强大的方法是destroy force(),它允许您强制终止已经超时或不再需要的进程。

3. StampedLocks

现在有令人兴奋的事情了。没有人喜欢同步代码。它是降低应用程序(尤其是可伸缩应用程序)吞吐量的罪魁祸首,或者更糟——它会导致应用程序挂起。然而,在某些时候你别无选择。

有许多方法可以限制多线程同步访问关键资源。最著名的是读写锁及其相关实现。它可以通过允许多线程访问同一资源但阻止操作该资源的线程来减少资源争用。这在理论上听起来不错,但实际上这个锁相当慢,尤其是有大量写线程的时候。

注意:读写锁将资源访问者分为两类:读者和作者。读者可以只读资源,作者可以操作资源。

Java 8引入了一种全新的读写锁,叫做StampedLock。这种锁不仅速度更快,而且为乐观锁定提供了一组强大的API。通过它,你可以用最低的成本获得一个阅读器锁,即使你不想在选择期内写。选择之后,可以通过查询这个锁来检查在选择期间是否有写操作。在这种情况下,您可以选择是重试、更新锁还是放弃。

这个锁是一个强大的工具,需要一个专门的文章来描述。这个新玩意让我兴奋得头晕目眩——干得好!

更多详情请见此处。

4. Concurrent Adders

这是从事多线程应用的人的又一个小宝。它是一个简单高效的多线程计数器新API,比使用AtomicInteger更快。太他妈酷了!

5. Optional Values

哦,空指针,所有Java开发者的噩梦。这可能是从一开始(或者至少在1965年)最受欢迎的例外。

借鉴Scale和Hashell的经验,Java 8有了一个名为Optional的新模板,用来封装可能为null的引用。这绝不是终结空值的灵丹妙药,而是一种让API设计者从代码级别(而不是文档级别)指示空值可以传入方法或从方法返回的方法,以便调用者可以为空值做好准备。因此,这只能在新的API下工作,并且假定被调用。

不得不说我对这个功能很矛盾。一方面,null有一个很大的问题,所以我倾向于在事情发生之前做好一切。但另一方面,我怀疑它是否会成功。这是因为使用Optional需要整个公司不断的努力,但是没有直接的价值。除非轰轰烈烈,否则很可能会被抛弃。

有关可选的更多信息,请单击此处。

6. 注解任何东西

Java语言的另一个小改进是,现在几乎可以在代码的任何地方添加注释。以前,注释只能添加到类或方法声明中。使用Java 8的注释可以添加到变量和参数声明中,不仅在向指定类型传递值时,而且在向新对象分配空间时。这是通过静态分析和向导工具(如FindBugs)以及专注于(与Java文档工具和API一起改进)使Java语言更加友好的一部分。这是一个很棒的特性,但它更像是Java 7引入的invokeDynamic,它的真正价值取决于社区用它做什么。

7. 溢出操作

现在有一系列方法从一开始就应该包含在核心库中。我最喜欢的一个习惯就是在int超过2 ^ 32的时候调试溢出,然后继续随机制造这个臭名昭著的bug(比如“我是怎么得到这个奇怪的值的?”).

这次也没有什么灵丹妙药,但是有一系列操作数字的函数。当溢出发生的方式比隐式导致溢出的标准/*运算符更难以忍受时,这些函数将引发异常.如果我是你,我会将其设置为JVM的默认模式,并使用允许算术溢出的显式函数(而不是*运算符)。

8. 文件夹遍历

迭代目录树的内容很早就出现在google搜索中(在这种情况下你可能会使用Apache。FileUtils)。Java 8

为文件添加了10个新方法。我最喜欢的是walk(),它创建了一个惰性流(对大型文件系统很重要)来迭代

目录的内容。

9. 强随机数生成

现在,有很多关于密码和密钥脆弱性的讨论。程序安全是一个棘手的问题,很容易出错。这是我喜欢的。

JVM中可以自动选择随机数生成器最强的新SecureRandom.getinstanceStrong()方法的原因。它减少了

默认得到生成器失效或弱生成器的概率,导致密钥或加密值容易被破解。

10. Date.toInstant()

Java引入了一个新的日期时间API。因为现有的api不好,这也挺好理解的。Joda多年来一直专注于Java的日期时间API。然而,即使有了新的API,仍然有一个大问题:有大量的代码和库使用旧的API。

我们都知道我们面临着这个问题,那么我们该怎么办呢?

因为Java 8非常优雅,所以Date类中增加了一个新的方法toInstant(),将它转换成一个新的API。即使你使用旧的日期API(在可预见的将来还是一样),你也可以快速升级到新的API。

如果你认为文章中还有其他不应该提到的特征,或者你不同意我们的分析?请致电——向我们提出意见。这就是发帖的目的!

以上是Java 8新特性的整理,后续会继续补充相关信息。感谢您对本站的支持!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: