关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » JAVA »你可能没听过的 Java 8 中的 10 个特性

    你可能没听过的 Java 8 中的 10 个特性

    2014-08-06 00:00:00 出处:ITJS
    分享

    你以前听到的谈论关于Java8的所有都是围绕lambda表达式. 但它仅仅是Java8的一部分. Java 8 有许多新特性—一些强大的新类和语法, 还有其他的从一开始就应该具有的东西.

    我将要介绍我认为值得了解的10个精华特性. 它们中最少也会有一个或两个你想要试一试, 所以我们开始吧!

    Blog_treasure box__

    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。

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

    来自:oschina

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。