java 从未导入_Java 8的10个您从未听说过的功能

java 从未导入

Lambdas lambdas lambdas。 这是您在谈论Java 8时所听到的所有信息。但这只是一部分。 Java 8具有许多新功能-一些功能强大的新类和习惯用法,而另一些则是从一开始就应该存在的功能。

我想介绍十个新功能,我认为这些功能绝对是值得了解的小宝石。 您肯定要尝试至少一两个,所以让我们开始吧!


  1. 默认方法
  2. 作为Java语言的新增功能,您现在可以将方法主体添加到接口中(称为默认方法 )。 这些方法隐式添加到实现该接口的每个类中。

    这使您可以在不破坏代码的情况下向现有库添加功能。 这绝对是一个加号。 不利的一面是,这严重模糊了旨在用作合同的接口与用作其具体实现的类之间的界限。 在正确的地方,这可能是使界面更智能,避免重复并扩展库的一种优雅方法。 如果使用不当,我们将很快看到接口方法对此进行查询并将其转换为具体类型。 颤抖……

  3. 流程终止
  4. 启动外部进程是您做的事情之一,半知道在进程崩溃,挂起或消耗100%CPU时您将再次调试它。 现在,Process类提供了两种新方法来帮助您控制不规则的过程。

    第一个是isAlive()使您可以轻松检查进程是否仍在启动中,而不必等待它。 第二个功能更强大的是destroyForcfully() ,它使您可以强制终止已超时或不再需要的进程。

  5. 印花锁
  6. 现在,这里有些令人兴奋的事情。 没有人喜欢同步代码。 这是降低应用程序吞吐量(尤其是规模过小)的可靠方法,或者更糟糕的是,导致应用程序挂起。 即使这样,有时候您也别无选择。

    有很多习惯用法可以同步对资源的多线程访问。 最受尊敬的产品之一是ReadWriteLock及其相关的实现。 这种习惯用法旨在通过允许多个线程消耗资源,同时仅阻止操纵该线程的线程来减少争用。 从理论上讲听起来不错,但实际上,这种锁定是sloooow ,尤其是在具有大量编写线程的情况下。

    这太糟糕了,Java 8引入了一个全新的RWLock,称为StampedLock 。 此锁不仅速度更快,而且还提供了用于乐观锁的强大API,您可以以非常低的成本获得阅读器锁,希望在关键部分不会发生任何写操作。 在本节的最后,您查询锁,以查看在此期间是否发生过写入,在这种情况下,您可以决定是重试,升级锁还是放弃。

    该锁是一个功能强大的工具,其本身值得一个完整的帖子。 我对这个新玩具感到兴奋-做得好!

    在这里补充阅读。

  7. 并发加法器
  8. 对于从事多线程应用程序的任何人来说,这都是另一个小宝。 一个简单高效的新API,用于从多个线程读取和写入计数器,其方式比使用AtomicIntegers还要快。 真是太酷了!

  9. 可选值
  10. 噢,NullPointers,所有Java开发人员的祸根。 也许是所有例外中最受欢迎的例外,这种情况自时间开始以来就已经存在。 至少是1965年

    Java 8从Scala和Haskell借来的,有一个名为Optional的新模板,用于包装可能为空的引用。 绝非以null结尾的灵丹妙药,而是让API设计人员在代码级别(相对于文档)表示可以返回null值或将null值传递给方法,并且调用者应准备为它。 因此,这仅适用于新的API,前提是调用者不让引用转义包装程序,而该引用程序可能在不安全地被取消引用。

    我必须说我对此功能非常矛盾。 一方面,空值仍然是一个巨大的问题,因此,我感谢在这方面所做的一切。 另一方面,我相当怀疑这会成功。 这是因为采用Optional需要公司范围内的持续努力,并且几乎没有立即价值。 除非大力执行,否则这将留在路边。

    更多关于可选这里

  11. 注释任何内容
  12. Java语言的另一个小改进是现在可以将注释添加到代码中的几乎所有内容中。 以前,注释只能添加到类或方法声明之类的内容中。 使用Java 8时,在将值转换为特定类型的值时,甚至在分配新对象时,都可以将注释添加到变量和参数声明中。 这是集中精力的一部分(以及对Java doc工具和API的改进),以使该语言对静态分析和检测工具(例如FindBugs)更加友好。 这是一个很好的功能,但是很像Java 7中引入的invokeDynamic一样,它的真正价值将取决于社区对其的处理方式。

  13. 溢流作业
  14. 现在,这里是一组方法 ,从一开始就应该成为核心库的一部分。 我最喜欢的一种爱好是,当int超过2 ^ 32时调试数字溢出,然后继续创建最讨厌,最随机的错误(即“我是如何得到这个奇怪的值的?”)。

    再一次,这里没有灵丹妙药,而是一组对数字进行操作的函数,这些数字在溢出时以比标准+ / *运算符隐式溢出的方式宽容的方式宽容。 如果由我决定,我将把它作为JVM的默认模式,并使用允许算术溢出的显式函数。

  15. 目录漫游
  16. 长期以来,迭代目录树的内容一直是​​谷歌搜索的一种方法(在这种情况下,您可能应该使用Apache.FileUtils)。 Java 8为Files类提供了一种全新的外观,其中包含十种新方法。 我最喜欢的一个是walk() ,它创建了一个惰性流(对于大型文件系统很重要)以迭代目录结构的内容。

  17. 强随机生成
  18. 如今不乏有关密码和密钥漏洞的讨论。 编程安全性是一项棘手的事务,容易出错。 这就是为什么我喜欢新的SecureRandom。 getinstanceStrong()方法自动选择最强大的JVM可用随机生成器。 这减少了您无法获得或默认使用弱生成器的机会,这会使密钥和加密值更容易受到黑客攻击。

  19. Date.toInstant()
  20. Java 8引入了完整的新日期时间API 。 这是可以理解的,因为现有的不是很好。 多年来,Joda实际上一直是Java日期时间API的首选。 尽管如此,即使有了新的API,仍然存在一个大问题–使用旧的API仍然有大量的代码和库。

    我们都知道他们会留下来。 所以你会怎么做?

    为此,Java 8做得非常漂亮,在Date类中添加了一个名为toInstant()的新方法,该方法将其转换为新的API。 这使您可以快速跳转到新API,即使使用使用旧Date API的代码(并且在可预见的将来会继续这样做)也是如此。

    您是否认为缺少任何功能,需要将其保留在此处,或者不同意我们的分析? 在评论部分让我们知道–这就是它的作用!

翻译自: https://www.javacodegeeks.com/2014/05/10-features-in-java-8-you-havent-heard-of.html

java 从未导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值