您从未听说过的Java 8的10个功能
Lambdas lambdas lambdas。 这是您在谈论Java 8时所听到的所有信息。但这只是一部分。 Java 8具有许多新功能-有些是功能强大的新类和习惯用语,而另一些则是从一开始就应该存在的功能。
我想介绍十个新功能,我认为这些功能绝对是值得了解的小宝石。 您肯定会尝试至少一两个,所以让我们开始吧!
- 默认方法
作为Java语言的新增功能,您现在可以将方法主体添加到接口中(称为默认方法 )。 这些方法隐式添加到实现该接口的每个类中。
这使您可以在不破坏代码的情况下向现有库添加功能。 这绝对是一个加号。 不利的一面是,这严重模糊了旨在用作合同的接口与用作其具体实现的类之间的界限。 在正确的地方,这可能是使界面更智能,避免重复并扩展库的一种优雅方法。 如果使用不当,我们很快就会看到接口方法对此进行查询并将其转换为具体类型。 颤抖…… 。
- 流程终止
启动外部进程是您要做的事情之一,半知道在进程崩溃,挂起或消耗100%CPU时您将再次调试它。 现在,Process类提供了两种新方法来帮助您控制不规则的过程。
第一个是isAlive() ,使您可以轻松检查进程是否仍在启动中,而不必等待它。 第二个功能更强大的是destroyForcfully() ,它使您可以强制终止已超时或不再需要的进程。
- 印花锁
现在,这里有些令人兴奋的事情。 没有人喜欢同步代码。 这是降低应用程序吞吐量(尤其是规模过小)的可靠方法,或者更糟糕的是,导致应用程序挂起。 即使这样,有时您还是别无选择。
有很多习惯用法可以同步对资源的多线程访问。 最受尊敬的产品之一是ReadWriteLock及其关联的实现。 这种习惯用法旨在通过允许多个线程消耗资源,同时仅阻止操纵该线程的线程来减少争用。 从理论上讲听起来不错,但实际上,这种锁定是sloooow ,尤其是在具有大量编写线程的情况下。
这太糟糕了,以至于Java 8引入了一个全新的RWLock,称为StampedLock 。 这种锁定不仅速度更快,而且还提供了用于乐观锁定的强大API,您可以以非常低的成本获得阅读器锁定,希望在关键部分不会发生任何写操作。 在本节的最后,您查询锁,以查看在此期间是否发生过写入,在这种情况下,您可以决定是重试,升级锁还是放弃。
此锁是一个功能强大的工具,其本身值得一个完整的帖子。 我对这个新玩具感到兴奋不已-做得好!
在这里补充阅读。
- 并发加法器
对于从事多线程应用程序的任何人来说,这都是另一个小宝。 一个简单高效的新API,用于从多个线程读取和写入计数器,其方式比使用AtomicIntegers还要快。 真是太酷了!
- 可选值
噢,NullPointers,所有Java开发人员的祸根。 也许是所有例外中最受欢迎的例外,这种情况自时间开始以来就已经存在。 或至少是1965年 。
Java 8从Scala和Haskell借来的,有一个名为Optional的新模板,用于包装可能为空的引用。 绝不是结束空值的灵丹妙药,而是让API设计人员在代码级别(相对于文档)表示可以返回空值或将空值传递给方法,并且调用者应准备为它。 因此,这仅适用于新的API,前提是调用者不让引用转义包装程序,而该引用程序可能会被不安全地取消引用。
我必须说我对此功能非常矛盾。 一方面,空值仍然是一个巨大的问题,因此,我感谢在这方面所做的一切。 另一方面,我相当怀疑这是否会成功。 这是因为采用Optional需要全公司范围内的持续努力,并且几乎没有立即价值。 除非大力实施,否则这将留在路边。
更多关于可选这里 。
- 注释任何内容
Java语言的另一个小改进是现在可以将注释添加到代码中的几乎所有内容中。 以前,注释只能添加到类或方法声明之类的内容中。 使用Java 8时,在将值转换为特定类型的值时,甚至在分配新对象时,都可以将注释添加到变量和参数声明中。 这是集中精力的一部分(以及对Java doc工具和API的改进),以使该语言对静态分析和检测工具(例如FindBugs)更加友好。 这是一个很好的功能,但是很像Java 7中引入的invokeDynamic一样,它的真正价值将取决于社区对其的处理方式。
- 溢流作业
现在,这里有一系列方法 ,从一开始就应该成为核心库的一部分。 我最喜欢的一种爱好是,当int超过2 ^ 32时调试数字溢出,然后继续创建最讨厌,最随机的错误(即“我是如何得到这个奇怪的值的?”)。
再一次,这里没有灵丹妙药,而是一组对数字进行运算的函数,这些数字在溢出时以比您的标准+ / *运算符隐式溢出的方式宽容的方式少。 如果要由我决定,我将把它作为JVM的默认模式,并使用允许算术溢出的显式函数。
- 目录漫游
长期以来,迭代目录树的内容一直是Google进行的那些搜索之一(在这种情况下,您可能应该使用Apache.FileUtils)。 Java 8为Files类提供了一种全新的外观,其中包含十种新方法。 我最喜欢的一个是walk() ,它创建一个惰性流(对于大型文件系统很重要)以迭代目录结构的内容。
- 强随机生成
如今不乏有关密码和密钥漏洞的讨论。 编程安全性是一项棘手的事务,容易出错。 这就是为什么我喜欢新的SecureRandom。 getinstanceStrong()方法自动选择最强大的JVM可用随机生成器。 这减少了您无法获得或默认使用弱生成器的机会,这会使密钥和加密值更容易受到黑客攻击。
- Date.toInstant()
Java 8引入了完整的新日期时间API 。 这是可以理解的,因为现有的不是很好。 实际上,Joda多年来一直是Java日期时间API的首选。 尽管如此,即使有了新的API,仍然存在一个大问题–使用旧的API仍然有大量的代码和库。
我们都知道他们会留下来。 所以你会怎么做?
为此,Java 8做得非常漂亮,在Date类中添加了一个名为toInstant()的新方法,该方法将其转换为新的API。 即使使用使用旧Date API的代码(并且在可预见的将来仍会继续使用),这使您可以快速跳转到新API。
您是否认为缺少任何功能,需要将其保留在此处,或者不同意我们的分析? 在评论部分让我们知道–这就是它的作用!
翻译自: https://www.javacodegeeks.com/2014/05/10-features-in-java-8-you-havent-heard-of.html
您从未听说过的Java 8的10个功能相关推荐
- java 从未导入_Java 8的10个您从未听说过的功能
java 从未导入 Lambdas lambdas lambdas. 这是您在谈论Java 8时所听到的所有信息.但这只是一部分. Java 8具有许多新功能-一些功能强大的新类和习惯用法,而另一些则 ...
- 我从未看过荒原写作背景_您从未听说过的最佳数据科学认证
我从未看过荒原写作背景 重点 (Top highlight) **Update 8/15: it's recently come to my attention that the certificat ...
- ARM:你从未听说过的英国最成功的科技公司
ARM:你从未听说过的英国最成功的科技公司(转) 文/出自机器之心 在剑桥市外一个普通的商业园区中,坐落着英国最成功的科技公司--ARM.你可能从来没听过它的名字,但是ARM的设计却应用于iphone ...
- 【java】java自带的java.util.logging.Logger日志功能
偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...
- Java实现在线预览功能
java实现在线预览功能,需要用到 jacob.dll jacob.jar 预览pdf所需js pdfobject.min.js 将上传文件转为pdf保存. <divclass=&quo ...
- Java字符串的10大热点问题盘点
Java字符串的10大热点问题盘点 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符串,应该用"==&quo ...
- 学java的正确方法_学习Java编程 这10个技巧不容错过--中享思途
这是一个国外大神20多年的经验总结出来的-- "任何可能出错的事情,最后都会出错." 这就是人们为什么喜欢进行"防错性程序设计"的原因.偏执的习惯有时很有意义, ...
- java书籍_学习Java最好的10本书,从入门到精通
在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...
- Scala特质trait具备Java中类和接口的功能
特质trait具备Java中类和接口的功能
最新文章
- JQuery操作下拉框
- jquery监听pda 按键_nui监听安卓PDA扫描事件
- python生成随机字符串
- unix时间戳(unix timestamp)与北京时间的互转方法
- SPRO事务码里如何开发一个新的customizing activity
- Windows Phone 7实现图片数据绑定
- 结合图拉普拉斯的半监督学习
- LoRa VS NB-IoT,一场物联网时代 C 位争夺战
- mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
- 【渝粤教育】国家开放大学2018年秋季 0313-22T促销策划与实战 参考试题
- 人工智能 AI 概念梳理
- 解决esp8266无法连接手机和电脑热点的问题
- 最美证件照工作室需要买什么东西
- 利用 Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。 如果该年没有举办世界杯,则输出:没有举办世界杯。
- 【银河麒麟V10】【服务器】IO调度算法与性能分析
- Android Studio打地鼠小游戏
- 如何说服导师放你去实习?
- 微软新版Edge浏览器开发者检查工具(F12)中英文切换
- MQ同类产品对比以及选型-RocketMq的背后故事
- 做自媒体视频剪辑,必备的辅助工具和素材网站
热门文章
- count() * ,1,字段 三兄弟
- springboot-Initializer例子及分析
- 自定义类加载器(ClassLoader + URLClassLoader)
- HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例
- 精简jdk包_在JDK 12精简数字格式中使用最小分数数字
- web.xml.jsf_面向初学者的JSF 2.0教程
- jcmd_程序化JCMD访问
- 代理模式和动态代理模式_代理模式介绍
- 高效的企业测试-工作流和代码质量(4/6)
- 在JDK 12精简数字格式中使用最小分数数字