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 从未导入

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

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

相关文章

删除当前路径下含某个关键字的所有文件

一 查找含关键字的所有文件名 此处拿"T5"举例 1. 使用ls命令查找 ls -R | grep T5 # -R 显示文件夹内部所有文件 2. 使用find命令 find . -name "*T5*" 二 将查找到的文件删除 find . -name "*T5*" |xargs rm -rf xargs - build and exec…

Typora设置标题自动标号

Typora由于默认标题无法自动标号,每次编辑时需要手动处理。为实现标题自动编号,需要进行相关操作。 一 官方说明 To achieve this, add the following to your base.user.css or [theme].user.css in the theme folder. /** initialize css counter */ …

捕获Java堆转储的7个选项

堆转储是诊断与内存相关的问题的重要工件,例如内存泄漏缓慢,垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。 有很多很棒的工具,例如Eclipse MAT和Heap Hero,可以分析堆转储。 但是,您需…

Ubuntu对CPU进行测试

一 用 stress 工具对CPU进行压力测试 1.软件安装 sudo apt-get update #日常先更新再安装东西不容易出错 #下一條語句可以省略 sudo apt-get install -y linux-tools-$(uname -r) #系统基本功能安装 sudo apt-get install stress #安装stress软件 sudo stress -c 2 -t 100 …

第一章 基础算法(一)

文章目录排序快速排序--分治归并排序二分整数二分浮点数二分整体框架排序 快速排序–分治 785题目: 给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式 输入共两行,第一行包含整数…

java8hashmap_Java 8中的HashMap性能改进

java8hashmapHashMap<K, V>是每个Java程序中快速&#xff0c;通用且无处不在的数据结构。 首先是一些基础知识。 您可能知道&#xff0c;它使用键的hashCode()和equals()方法在存储桶之间拆分值。 存储桶&#xff08;箱&#xff09;的数量应略高于映射中的条目数&#xf…

装前必看施工干货,贴瓷砖的5大步骤。福州中宅装饰,福州装修

亲爱的朋友们&#xff0c;你们是否曾经在装修房屋时遇到过贴砖的难题呢&#xff1f;贴砖可是装修工程中一项重要的工艺&#xff0c;它直接影响到整个装修的效果和质量。今天&#xff0c;我就来跟大家分享一下贴砖的几个重要要点&#xff0c;希望对你们有所帮助。 1️⃣ 选材是关…

Typora+Node.js+PicGo搭建图床

目录 一 问题背景 二 具体步骤 2.1 picgo的安装 1. 下载picgo 2. 安装 3. 效果 2.2 Node.js的安装 (1)下载链接 &#xff08;2&#xff09;安装步骤 2.3 Gitee设置 2.3.1在gitee上面创建一个仓库 2.4 整体配置 2.4.1 picgo软件配置 2.4.2 图床设置 2.4.3 Typora配…

JMetro版本11.6和8.6发布

再次返回另一个JMetro版本。 这是一个重要的里程碑&#xff0c;此版本中增加了样式&#xff0c;JavaFX库中的所有JavaFX控件现在都具有JMetro样式。 除此之外&#xff0c;还有用于ControlsFX StatusBar的新JMetro样式&#xff0c;对现有样式的样式调整&#xff0c;错误修复等。…

第一章 基础算法(二)

文章目录高精度高精度加法高精度减法高精度乘法高精度除法前缀和一维前缀和二维前缀和--求子矩阵中一部分和差分一维差分二维差分高精度 高精度加法 791 给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。输入格式 共两行&#xff0c;每行包含一个…

Win10窗口管理

快捷键功能Alt Esc将当前窗口置于底层Alt 空格 N最小化当前窗口Alt 空格 X最大化当前窗口 为方便管理窗口&#xff0c;用不到的窗口进行最小化处理Alt 空格 N,不同窗口之间使用Alt Esc切换

管理多个Java安装

随着越来越多的Java版本发布&#xff0c;在本地环境中管理多个Java安装将变得更加有趣。 不同的项目可能需要不同的Java版本。 jenv项目是管理Java安装的便捷方式。 它可以在全局&#xff0c;目录和外壳程序级别上设置本地Java安装&#xff0c;并使用易于记忆的Java版本标识符…

第一章 基础算法(三)

文章目录双指针算法双指针算法分类双指针算法模板性质&#xff1a;总结例1例2位运算二进制的第k位lowbit 返回x的最后一位1实现计算机中编码知识做题思路离散化区间合并双指针算法 双指针算法分类 双指针算法模板 性质&#xff1a; 总结 为什么双指针算法可以起到优化的作用&a…

怎样编写测试类测试分支_编写干净的测试-被认为有害的新内容

怎样编写测试类测试分支很难为干净的代码找到一个好的定义&#xff0c;因为我们每个人都有自己的单词clean的定义。 但是&#xff0c;有一个似乎是通用的定义&#xff1a; 简洁的代码易于阅读。 这可能会让您感到有些惊讶&#xff0c;但我认为该定义也适用于测试代码。 使测试…

不同字符串输入之间的区别

1 问题描述&#xff1a;scanf使用%c接受字符串 scanf使用%c接受字符串时无法识别回车符号 #include <iostream> int main() {char ch1,ch2;printf("Input for ch1:\n");scanf("%c",&ch1);printf("ch1%c\n",ch1);printf("Input …

第二章 数据结构(二)

文章目录Trie树存储并查集常规例题并查集维护多余信息堆性质存储基础操作downup操作例题Trie树 Tire&#xff1a;高效地存储和查找字符串集合的数据结构 存储 如果没有就创建。 对单词结尾进行标记&#xff0c;表示以当前节点结尾的地方存在一个单词 维护一个字符串集合&am…

Apache Camel 3只有2个月的路程

骆驼队正忙于为 Apache Camel3 。今天&#xff0c;第二个候选版本已构建并发布在暂存库中&#xff0c;供早期的适配器尝试 。 当我自己很忙的时候&#xff0c;我只想写一篇简短的博客文章&#xff0c;以使社区了解Apache Camel 3即将发布&#xff0c;我们希望它在今年年底&am…

第二章 数据结构(三)

文章目录哈希表存储结构拉链法&#xff1a;插入查询题目注意开放寻址法查找质数代码字符串哈希方式STL相关知识哈希表存储结构 整体结构 0~109->0~105 方法&#xff1a; x mod 105处理冲突 开放寻址法拉链法 拉链法&#xff1a; 思想&#xff1a;每个槽上拉一条链&…

Vaadin 10+作为CUBA UI的未来

从一开始&#xff0c;Vaadin就成为CUBA平台用户界面的基石和重要组成部分。 由于其创新的方法&#xff0c;它帮助CUBA将企业用户界面开发带到了一个非常有希望的&#xff08;如今是默认&#xff09;的WEB领域。 Vaadin最令人兴奋的部分之一是整个开发都是同构的&#xff0c;并且…

第二章 数据结构(一)

文章目录整体结构为什么用数组链表与邻接表单链表存储插入插入至头结点将x插入到下标为k的点后面删除遍历双链表初始化插入删除邻接表栈和队列栈队列单调栈单调队列KMP整体结构 链表与邻接表&#xff08;用数组模拟&#xff09;栈与队列&#xff08;用数组模拟&#xff09;kmp…