您从未听说过的Java 8的10个功能

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的新模板,用于包装可能为空的引用。 绝不是结束空值的灵丹妙药,而是让API设计人员在代码级别(相对于文档)表示可以返回空值或将空值传递给方法,并且调用者应准备为它。 因此,这仅适用于新的API,前提是调用者不让引用转义包装程序,而该引用程序可能会被不安全地取消引用。

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

    更多关于可选这里 。

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

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

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

  15. 目录漫游
  16. 长期以来,迭代目录树的内容一直是​​Google进行的那些搜索之一(在这种情况下,您可能应该使用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。 即使使用使用旧Date API的代码(并且在可预见的将来仍会继续使用),这使您可以快速跳转到新API。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浮动层图片鼠标指针移到自动放大

html code:1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2<html xmlns"http://www.w3.org/1999/xhtml">3<head>4<title>缔友计算机信…

透明的iframe

<iframe allowtransparency"true" src"about: " οnlοad"style.display block;"> 只要是两个属性&#xff1a; 1&#xff09; allowtransparency"true" 2&#xff09; src"about: " 或iframe 的风页设置成 在IE下…

koa2 mongdb 做后端接口的小demo

现在前端全栈里面有一种技术栈比较火 前端使用 vue 或者react 后端使用 koa2 mysql数据库 或者mongdb做数据储存 但是基本这样的全栈教程 都要收费 收费就收费吧 但是 有没有遇到非常好的教程 于是 准备硬着头皮看别人项目的源码 自己摸索 一步一步完成 koa mongdb的后端学习…

字符大小端aix linux,long, unsigned long不是跨平台的(慎用)

项目中用到long、long long等字段&#xff0c;遇到一些问题。先说得到的一些结论&#xff1a;大小端&#xff1a;Windows、Linux是小端&#xff0c;AIX是大端。sizeof(指针类型)程序位数/8。long、unsigned long不是跨平台的&#xff0c;一定要慎用。自己写了程序测试各平台下(…

Java构建工具:Ant vs. Maven vs Gradle

最初&#xff0c;Make是唯一可用的构建工具。 后来通过GNU Make进行了改进。 但是&#xff0c;从那时起&#xff0c;我们的需求增加了&#xff0c;结果&#xff0c;构建工具也不断发展。 JVM生态系统主要由三个构建工具组成&#xff1a; 常春藤的 Apache Ant 马文 摇篮 An…

redis问题与解决思路

问题现象&#xff1a; 集群状态 1主 2从&#xff0c;主没有开启bgsave&#xff0c;从开启bgsave。现象所有redis可以访问&#xff0c;进行操作。主不断开始bgsave 1从停止bgsave。 主日志报错# Connection with slave XXXX lost. 从日志报错# Timeout receiving bulk data from…

Asp.Net中用javascript实现弹出窗口永远居中

//Asp.Net中用javascript实现弹出窗口永远居中functionShowDialog(url) { var iWidth600; //模态窗口宽度 var iHeight500;//模态窗口高度 var iTop(window.screen.height-iHeight)/2; var iLeft(window.screen.width-iWidth)/2; window.open(url,"Detail"…

Linux Vim 光标错位,技术|Vim 复制粘帖格式错乱问题的解决办法

有时候&#xff0c;复制文本(尤其是代码)到 Vim&#xff0c;会出现格式错乱的问题。看样子&#xff0c;应该是自动缩进惹得祸。本文不去深究原因&#xff0c;直接给出解决方法。1. paste 模式运行如下命令&#xff0c;进入 paste 模式&#xff1a;:set paste进入 paste 模式后&…

jQuery事件机制

1 事件操作 1.1 页面载入事件 $(document).ready(function(){// 在这里写你的代码... }); 或者 $(function($) { // 你可以在这里继续使用$作为别名... }); 1.2 事件绑定 on(eve,[sel],[data],fn) 1.7 在选择元素上绑定一个或多个事件的事件处理函数 bind(type,[dat…

struts中多个模块时,使用多个struts-config.xml文件之间时如何切换的!

1.配置web.xml文件&#xff0c;通知控制器&#xff1a; <!-----------------这个是默认的--------------------------> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-valu…

关于JVM和JIT的一点点

如您所知&#xff0c;JVM&#xff08;Java Virtusal Machine&#xff09;使Java能够遵循“一次写入&#xff0c;随处运行”的范例。 JVM的核心包括以下组件&#xff1a; 堆 堆 PermGen和方法区域 JIT编译器 代码缓存 堆是在应用程序代码开发阶段为您使用的每个新运算符分…

kali vmtools 不能复制粘贴解决方法(绝对实用)

朋友问起怎么vm kali 2019怎么不能复制了&#xff0c;而且网上的方法大多不适合。我就在这儿记录一笔吧&#xff0c;方便大家。 之前发现最新kali复制粘贴不能用&#xff0c;后来发现一个奇妙的套路&#xff0c;不是共享文件夹。只需要把文件复制到命令行中&#xff0c;会出现t…

web前端-回调函数sort详解

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>JS函数</title></head><body> <script> //回调函数 &#xff08;高阶函数&#xff09; function fn(f1, f2) { return f1(1) …

MineCraft和堆外内存

总览 MineCraft是一个很好的例子&#xff0c;说明何时堆外内存确实可以提供帮助。 关键要求是&#xff1a; 保留的数据大部分是一个简单的数据结构&#xff08;在我的世界的情况下&#xff0c;它的很多字节[]&#xff09; 堆外内存的使用可以隐藏在抽象中。 考试 我使用以下测…

kubernetes进阶之七:Service

1.概述 Service也是Kubernetes里的最核心的资源对象之一&#xff0c;Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”&#xff0c;之前我们所说的Pod、RC等资源对象其实都是为这节所说的“服务”------Kubernetes Service作“嫁衣”的。图1.12显…

IE Firefox css 差别 [转]

1、单位问题问题&#xff1a;任何距离的数值ie可以不加单位&#xff0c;ff必须要求写单位&#xff08;0除外&#xff09; 解决&#xff1a;写全单位如padding:0px;2、水平居中问题&#xff1a;div里的内容&#xff0c;ie默认为center&#xff0c;而ff默认left 解决&#xff1a;…

Inside Kolla - 04 Kolla 目录结构

Kolla 目录结构 把 Kolla 的源代码下载下来后&#xff0c;先从总体上分析 Kolla 的目录结构&#xff0c;查看顶层目录结构&#xff0c;使用 tree -L 1 输出 . ├── ansible ├── compose ├── demos ├── devenv ├── docker ├── docs ├── LICENSE ├── READ…

Json Schema的使用

直接上案例&#xff1a; 在Web Api通讯中&#xff0c;客户端发送json数据&#xff0c;服务端反序列化json&#xff08;json与某个类形成对应关系&#xff09;&#xff0c;在某些情况下&#xff0c;需要校验其上传的json是否合法。 服务端是使用Json.net(newtonsoft.json)进行…

红帽企业版linux 7.4更新启动,红帽Linux企业版7.4 淘汰Btrfs文件系统

我们不得不承认Btrfs是一种古老的文件系统&#xff0c;当初(2007年)是由甲骨文宣布并进行中的COW(copy-on-write式)文件系统&#xff0c;意图取代Linux的ext。但是天不遂人愿&#xff0c;2011年8月9日&#xff0c;Fedora就决定Btrfs不再作为Fedora 16默认文件系统&#xff0c;走…

关于控件postback 后viewstate加载失败的问题

我写了一个控件Inherits TextBox&#xff0c;里面有一个复杂属性Tip&#xff0c;但每次postback的时候都说加载viewstate失败&#xff0c;除非我在!postback的情况下给Tip.xxx赋值. 下面我贴出代码&#xff0c;我已经搞了一天了&#xff0c;搞不出什么原因。 JTextBox控件 usin…