1. 默认方法

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

  这能使你在不破坏代码的情况下为已存在的库添加新功能. 这很明显是个提升. 但另一方面这会混淆接口与类之间的界限, 因为接口用于定义契约, 而类用于定义具体实现. 从好的方面来说, 它会以一种优雅的方式使接口更智能, 并且避免了重复和扩展库. 但坏的方面, 我们稍后就会看到, 接口方法要查询this并将它转换成具体类. Shivers….

  2. 进程终止

  启动一个外部进程是你所做的事情中的一半-当这个进程崩溃, 挂起或消耗100% CPU时你要返回来对它进行调试. 现在Process类装备了两个新方法来帮助你控制不守规矩的进程.

  第一个是 isAlive(), 它会让你不需要等待进程运行完毕就可以检查这个进程是否仍在运行. 第二个更强大的方法是destroyForcibly() , 它能让你强制杀死超时或不再需要的进程.

  3. StampedLocks

  现在有一些令人激动的东西了. 没有人喜欢同步代码. 它是降低你的应用的吞吐量的罪魁祸首(特别是可扩展的应用), 或者更严重--导致应用挂掉. 尽管如此,在某些时候你别无选择.

  有很多方法来限制多线程同步访问临界资源.  其中最著名的是读写锁(ReadWriteLock)和与它相关的实现. 它通过允许多线程访问同一资源但阻塞操作资源的线程来减少资源争夺. 这听起来在理论上很不错, 但实际上这个锁是相当慢的, 特别是当有大量写线程时.

  注: 读写锁中将资源访问者分为两类:读者和写者, 读者对资源进行只读操作, 写者可操作资源.

  Java 8 引入了一种全新的称为StampedLock的读写锁. 这个锁不仅速度更快, 它更为乐观锁提供了一组强大的API, 通过它你可以以最小的代价取得一个读者锁, 甚至在选择期间不希望发生写操作.  在选择结束后你可以通过查询这个锁来查看在选择期间是否有写操作, 在这种情况下你可以选择是否重试, 更新锁还是放弃.

  这个锁是个很强大的工具, 它需要一篇专门的文章来描述. 我对这个新玩意儿兴奋得头都晕了--做得好!

  更多详情请参阅这里

  4. Concurrent Adders

  对从事多线程应用的人来说这是另一件小宝贝. 这是一个用于多线程计数器的简单高效的新API, 它比使用AtomicInteger更快. 真他妈酷!

  5. Optional Values

  哦, 空指针, 所有Java开发者的噩梦. 从一开始(或最少在1965)它可能就是最流行的异常了.

  借鉴自Scale和Hashell, Java 8 拥有一个新的称为Optional的模板, 用于封装可能为null的引用. 它绝不是终结null的银弹, 它更是一种方式-让API设计者从代码级别(而不是文档级别)表明一个null值可能会传入一个方法或从一个方法中返回, 以让调用者为null值做好准备. 因此, 这只能在新API下工作, 并且假设调用者不会让引用逃脱这个封装从而导致不安全的解引用.

  我不得不说我对这个特性很矛盾. 一方面null有很大问题, 所以我倾向于在null发生前做好所有事. 但另一方面我很怀疑它能否成功.这是因为使用Optional需要全公司不断的努力,但它并没有直接的价值。除非雷厉风行,否则它很可能会被放弃.

  更多关于Optional请点击这里

  6. 注解任何东西

  另外一个Java语言小改进是 annotations 现在能够添加在你代码的 几乎所有东西 上。以前, annotations 只能加在像类或者方法声明上。使用 Java 8 的 annotations 可以加在变量和参数声明中,不仅在传递一个值给指定类型时,甚至是分配空间给一个新的对象的时候。这是通过静态分析和向导工具 (比如 FindBugs) 让Java 语言更友好,集中精力 (沿着 Java 文档工具和 API 改进) 的一部分 。这是个很棒的特性,但是更多的是像Java 7 引入的 invokeDynamic ,其真正的价值决定在于 社区用它来做什么。

  7. 溢出操作

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

  这次也没有银弹, 但却有一系列操作数字的函数, 这些函数当以一种比隐式引起溢出的标准的+/*操作符更不能容忍的方式发生溢出时就会抛出异常.. 如果是我的话,我会将它设为JVM的默认模式, 使用允许算数溢出的显式函数(而不是+ *运算符).

  8. 文件夹遍历

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

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

  目录结构的内容.

  9. 强随机数生成

  现今关于密码和密钥的脆弱性的谈话短不了. 程序安全是个棘手的问题而且很容易犯错误. 这也是我喜欢

  在JVM中能够自动挑选最强随机数生成器的新SecureRandom.getinstanceStrong()方法的原因. 它降低

  了取得生成器失败, 或默认取得一个弱生成器从而导致密钥或加密值容易被破解的机率.

  10. Date.toInstant()

  Java 8 引入一个全新的  date time API。 因为已有的api并不好,这是相当可以理解的。现在 Joda 已经专注和深入 Java 的 date time API 好多年。但是,就算用新的API仍有个大问题存在—— 有数以吨计的代码和库在使用旧的API。

  我们都知道面临这个问题,那么要做些什么?

  因为 Java 8 已经做得相当优雅,在Date类中添加了一个新的方法toInstant() , 用来将其转化成为新的API。就算使用旧的Date API (在可预见的未来也是一样) , 也能让你快速升级到新的API。

  如果你觉得文章还有什么该有的特性没提到,抑或是不同意我们的分析?请评论给我们——这就是发文的目的 !

来源:http://www.admin10000.com/document/4342.html  知识共分享

转载于:https://blog.51cto.com/xiaoniudu/1408832

你可能没听过的 Java 8 中的 10 个特性相关推荐

  1. JAVA语法中case语句的特性

    JAVA语法中case语句的特性: 1.case拥有穿透机制, 若case后不写break,如果命中了某个case语句步骤,下面的case结果将会同时执行.建议写完一个case后 针对break的增加 ...

  2. java 监听多个按键_如何在所有组件中监听按键(在Java Swing中)?

    很简单我的朋友: 你所要做的就是创造一个 class KeyEventDispatcher并注册到KeyboardFocusManager C.1 然后解析并提取状态和密钥信息,参见:C.2 奇怪的是 ...

  3. java中servlet没反应_在Java Servlet中提交响应后无法转发

    我有登录JSP,它将重定向到名为DisplayData的servlet,该servlet必须检查用户凭据并仅显示注册用户的数据.但是它会引发错误,即"提交响应后无法转发".这是se ...

  4. 前瞻:在 Java 16 中会带来哪些新特性?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 随着JDK 15的发布,计划于明年3月发布的JDK 16 ...

  5. java 原子量_JAVA线程10 - 新特性:原子量

    一.原子量简介 原子量就是操作变量的操作是"原子的",该操作不可再分,因此是线程安全的. 原子量虽然可以保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,或者整个程序的安 ...

  6. 好用!期待已久的文本块功能究竟如何在 Java 13 中发挥作用?

    你继续半年一更,我继续用 Java 7/8. 这可能是很多朋友目前的真实情况.说实话,Java "每半年发布一个新版本"的节奏确实快了点.但不管怎样,新技术.新特性还是值得我们学一 ...

  7. java scope_spring中的scope详解

    1)singleton (单一实例) 此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例.如同每个国家都有一个总统,国家的所有人共用此总统,而这个国家就是一个spring容器,总统 ...

  8. Java 14 中令人期待的五大新特性!

    随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. 作者 | Sylvain Saurel 译者 | 苏本如,责编 | 郭芮 出 ...

  9. java10_JAVA10 64位下载|java se development kit 10(JDK10)下载 v10.0 官方版 - 比克尔下载

    java se development kit 10是JAVA最新的开发环境,你可以通过下载JAVA10 64位来体验最新版JDK的新特性,最重要的一个特性就是本地变量类型推断,让程序员们可以更便捷的 ...

最新文章

  1. mysql实现vpd_基于JDBC实现VPD:SQL解析篇
  2. python排序sorted_sorted排序的两个方法 - Python
  3. 畅享10e会有鸿蒙吗,功能虽小作用很大 华为畅享10e隐藏功能大揭秘
  4. 云图说 | 华为云医疗智能体智联大健康:AI医学影像
  5. js 拾遗 js时间戳转换
  6. android 防止重复启动app,Android应用开发Android 防止启动页面(SplashActivity)被多次启动...
  7. 计算机硬件基础课设总结,计算机硬件基础课程设计报告.doc
  8. 大量文本框非空判断,如何提高灵活性?
  9. python默认数据转换_Python数据转换与答案
  10. php 盒子边距,CSS 盒子模型外边距
  11. python rabitmq_python中RabbitMQ的使用(安装和简单教程)
  12. cocos2dx-lua 骨骼动画spine使用心得(cocos2dx版本 3.17 spine版本3.6.53)
  13. 那些开挂的人,如何打败50%的竞争者?
  14. 判断时间复杂度和空间复杂度
  15. 一、Filter的配置项dispatcher
  16. u8登录找不到服务器,用友u8不能连接到服务器
  17. HDU 6461 hzy 和zsl 的生存挑战(博弈)
  18. 图像透视投影变换 四边形——标准矩形
  19. int和字符串的类型转换
  20. RPC(Remote Procedure Call)框架详解

热门文章

  1. JavaScript中的(内置)方式来检查字符串是否为有效数字
  2. Idea tomcat控制台日志乱码
  3. centos7安装源疯了_Jenkins 在 Centos7 上安装(使用国内源)
  4. 电脑自动关机什么原因?
  5. win11任务栏卡死重启也没用怎么办
  6. slam无人车清除地图残影
  7. 实验5-9 使用函数输出水仙花数 (20 分)
  8. linux 6.5端口开启关闭,linux CentOS6.5 防火墙(关闭除提供系统服务以外的端口)...
  9. Halcon Blob分析(二值化图像分割)
  10. .net core EF Core 调用存储过程