
jdk新特性
文章平均质量分 92
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day726.Java平台模块系统 -Java8后最重要新特性
讨论了怎么使用 Java 模块封装我们的代码,了解了 module-info.java 文件以及它的结构和关键字。总体来看,Java 模块的使用是简单、直观的。Java 模块的使用,实现了更好的封装,也定义了模块和 Java 包之间的依赖关系。有了依赖关系,Java 语言就能够实现更快的类检索和类加载了。这样的性能提升,通过模块化就能实现,还不需要更改代码。如果面试的时候,讨论到了 Java 平台模块系统,可以聊一聊 Java 模块封装的关键字,以及这些关键字能够起到的作用。原创 2022-09-01 22:45:31 · 599 阅读 · 0 评论 -
Day725.Java为何需要模块化 -Java8后最重要新特性
讨论了 JDK 8 及其以前版本的访问控制缺陷,以及由此带来的种种问题。总体来说,Java 语言没有描述和定义包之间的依赖关系。这个缺失,导致了无法有效地封闭实现的细节;无法有效地管理应用的部署;无法精准地控制类的检索和加载,也影响了应用启动的效率。那能不能在 Java 语言里添加进来这个缺失的关系呢?该怎么做?这是下一次要讨论的话题。如果面试的时候,讨论到了Java 的访问修饰符,你不妨聊一聊这个缺失的环节,以及Jar 地狱这样的问题。...原创 2022-08-31 21:50:36 · 722 阅读 · 0 评论 -
Day724. 如何改进代码废弃 -Java8后最重要新特性
要管理好废弃的接口。接口的废弃要遵守程序,有序推进;代码的迁移要做好计划,尽快完成。另外,要使用好jdeprscan这个新的工具。在使用一个类库之前,要有意识地进行废弃依赖关系检查,提前做好代码风险的评估。如果面试中聊到了接口废弃的问题,可以聊一聊接口废弃的三部曲,以及每一步应该使用的 Java 注解形式。...原创 2022-08-30 21:45:28 · 711 阅读 · 0 评论 -
Day723. 现代密码 -Java8后最重要新特性
任何一个密码学的算法,都有它的生命周期。所以,要能够管理它们的生命周期。反映到代码里,就是要使用前向保密的安全协议以及当前推荐的算法;及时替换掉过期的算法。对于 JDK 的开发者来说,要关注JDK 的密码路线图,了解 JDK 根据密码学的进展作出的变动,及时解决代码里的兼容性问题。...原创 2022-08-29 22:06:06 · 526 阅读 · 0 评论 -
Day722. 空指针烦恼 -Java8后最重要新特性
在代码里,尽量不要产生空指针。没有空指针,也就没有了空指针的烦恼。如果避免不了空指针,我们就要看看能不能执行强制性的检查。通过使用空值去代替空指针通过@NotNull注解,只是告诉调用者我这个函数返回值可能是空通过Optional类,Optional 的价值不在于能避免空指针,更多的是一个强制性的提醒,让你去强制校验空指针。如果你去问一个开发为啥NPE了,得到的答案可能就是两个字: 忘了, 就这么直接。所以optional 是提醒你要去校验,而不是能替你解决。使用封闭类和模式匹配的组合形式。......原创 2022-08-28 20:24:58 · 491 阅读 · 1 评论 -
Day721. 外部函数接口 -Java8后最重要新特性
Java 的外部函数接口这个尚处于孵化阶段的新特性,对外部函数接口这个新特性有了一个初始的印象。外部内存接口和外部函数接口联系在一起,为我们提供了一个崭新的不同语言之间的协作方案。如果外部函数接口正式发布出来,我们可能需要考虑切换到外部函数接口,逐步退出传统的、基于 JNI 的解决方案。这一次学习的主要目的,就是让你对外部函数接口有一个基本的印象。由于外部函数接口尚处于孵化阶段,所以我们不需要学习它的 API。只要知道 Java 有这个发展方向,目前来说就足够了。...原创 2022-08-27 20:01:12 · 457 阅读 · 0 评论 -
Day720. 外部内存接口 -Java8后最重要新特性
讨论了 Java 的外部内存接口这个尚处于孵化阶段的新特性,对外部内存接口这个新特性有了一个初始的印象。设计外部内存接口的最初动力,是为了解决ByteBuffer的两个缺陷。也就是 ByteBuffer 占用的资源不能及时释放,以及它的寻址空间太小这两个问题。但是外部内存接口的更大使命,是和外部函数接口联系在一起的。如果外部内存接口正式发布出来,现在使用 ByteBuffer 的类库(比如 Flink 和 Netty,甚至 JDK 本身),应该可以考虑切换到外部内存接口来获取性能的提升。...原创 2022-08-26 23:04:57 · 434 阅读 · 0 评论 -
Day719. 矢量运算 -Java8后最重要新特性
Java 的矢量运算这个尚处于孵化阶段的新特性,对 Java 的矢量运算这个新特性有了一个初始的印象。如果 Java 矢量运算成熟起来,许多领域都可以从这个新特性中受益,包括但是不限于机器学习、线性代数、密码学、金融和 JDK 本身的代码。这一次学习的主要目的,就是让你对矢量运算有一个基本的印象。这样的话,如果代码里有大量的数值计算,也许可以考虑在将来使用矢量运算获得硬件的并行计算能力,大幅度提高代码的性能。...原创 2022-08-25 22:00:17 · 939 阅读 · 0 评论 -
Day718. 反应式编程 -Java8后最重要新特性
讨论了指令式编程模型和声明式编程模型,回调函数以及回调地狱,以及 Java 反应式编程模型的基本组件。了解指令式编程模型和声明式编程模型这两个术语;面试问题:你知道声明式编程模型吗,它是怎么工作的?了解 Java 反应式编程模型的基本组件,以及它们的组合方式;面试问题:你知道怎么使用 Java 反应式编程模型吗?知道回调函数的形式,以及回调地狱这个说法。面试问题:你知道回调函数有什么问题吗?反应式编程是目前主流的支持高并发的技术架构思路。原创 2022-08-24 22:30:16 · 563 阅读 · 0 评论 -
Day717. Java 的错误处理 -Java8后最重要新特性
可恢复异常不可恢复异常还给出了在使用错误码的场景下,快速定位问题的替代方案。了解可恢复异常和不可恢复异常这两个概念,以及它们的使用场景;面试问题:你的代码是怎么处理 Java 异常的?了解怎么在使用错误码的方案里,添加快速定位出问题的调试信息;面试问题:你的代码,是怎么定位可能存在的问题的?对 Java 错误处理机制的改进,这会是一个持续热门的话题。而能够了解替代方案,并且使用替代方案的软件工程师,现在还不多。原创 2022-08-23 22:17:18 · 273 阅读 · 0 评论 -
Day716. 抛出异常是一个合适的选择吗? -Java8后最重要新特性
了解了 Java 异常处理带来的性能问题,我还给你展示了使用错误码的方式进行错误处理的方案。使用错误码的方式进行错误处理,错误码不能携带调试信息,这提高了错误处理的性能,但是增加了错误排查的困难,降低了代码的可维护性。在代码里,是应该使用错误码,还是应该使用异常,这是一个需要根据应用场景认真权衡的问题。Java 的新特性,尤其是封闭类和档案类,为我们在 Java 的软件里使用错误码的形式,提供了强大的支持,让我们有了新的选择。原创 2022-08-22 21:50:47 · 529 阅读 · 1 评论 -
Day715. 适配不同的类型的switch匹配 -Java8后最重要新特性
具有模式匹配能力的 switch,提升了 switch 的数据类型匹配能力。switch 要匹配的数据,现在可以是整形的原始类型(数字、枚举、字符串),或者引用类型。在前面的讨论里,重点放在了 switch 表达式上。实际上,除了情景穷举相关的内容之外,我们的讨论也适用于 switch 语句。在我们日常的编码实践中,为了尽早暴露子类扩充出现的兼容性问题,降低代码的维护难度,提高多情景处理的性能,我们应该优先考虑使用 switch 的模式匹配,而不是传统的 if-else 语句。原创 2022-08-21 20:25:45 · 1457 阅读 · 0 评论 -
Day714. switch表达式 -Java8后最重要新特性
了解了 switch 表达式和改进的 switch 语句。讨论了 switch 表达式带来的新概念和新的关键字,了解了这些基本概念以及它们的适用范围。新的 switch 形式、语句和表达式,不同的使用范围,这些概念交织在一起,让 switch 的学习和使用都变成了一件有点挑战性的事情。箭头标识符的引入,简化了代码,提高了编码效率。可是,学习这么多种 switch 的表现形式,也增加了我们的学习负担。不同的 switch 表达形式,以及它们支持的特征,放在了下面这张表格里。原创 2022-08-20 15:16:15 · 2169 阅读 · 2 评论 -
Day713. 类型匹配:判断类型+强制转换合二为一 -Java8后最重要新特性
了解了 Java 的模式匹配和 Java 的类型匹配,讨论了 Java 类型匹配要解决的问题、表现的形式,以及匹配变量的作用域。顺便,我们还讨论了我们喜欢的类型匹配代码的组织方式。在我们日常的编码实践中,为了简化代码逻辑,减少代码错误,提高生产效率,我们应该优先考虑使用类型匹配,而不是传统的强制类型转换运算符。如果你想要丰富你的代码评审清单,有了 Java 类型匹配后,你可以加入下面这一条:如果需要类型转换,是不是可以使用类型匹配?原创 2022-08-19 22:09:21 · 1034 阅读 · 1 评论 -
Day712. 封闭类-Java8后最重要新特性
使用私有类;使用 final 修饰符;使用 sealed 修饰符;不受限制的扩展性。在我们日常的接口设计和编码实践中,使用这四个限定方法的优先级应该是由高到低的。最优先使用私有类,尽量不要使用不受限制的扩展性。如果要丰富你的代码评审清单,有了封闭类后,你可以加入下面这一条:一个类,如果有真实的可扩展需求,能不能枚举,可不可以使用 sealed 修饰符?知道 Java 支持封闭类,并且能够使用封闭类编写代码;面试问题:你知道封闭类吗?会不会使用它?...原创 2022-08-18 22:55:53 · 930 阅读 · 0 评论 -
Day711. 档案类-Java8后最重要新特性
Java档案类是用来表示不可变数据的透明载体,用来简化不可变数据的表达,提高编码效率,降低编码错误。同时,我们也讨论了使用档案类的几个容易忽略的陷阱。在我们日常的接口设计和编码实践中,为了最大化的性能,我们应该优先考虑使用不可变的对象(数据);如果一个类是用来表述不可变的对象(数据),我们应该优先使用 Java 档案类。如果要丰富你的代码评审清单,有了封闭类后,你可以加入下面这一条:一个类,如果是用来表述不可变的数据,能不能使用 Java 档案类?技术要点。...原创 2022-08-17 22:05:14 · 403 阅读 · 0 评论 -
Day710.文字块-Java8后最重要新特性
了解了文字块的基本概念,它的表达形式以及编译的过程。文字块是 Java 语言中一种新的文字。字符串能够出现的任何地方,也都可以用文字块表示。但是,文字块提供了更好的表现力和更少的复杂性。文字块“所见即所得”的表现形式,使得使用复杂字符串的代码更加清晰,便于编辑,也便于阅读。这是一个能够降低代码错误,提高生产效率的改进。知道文字块的基本概念,以及文字块和字符串的关系;面试问题:你知道 Java 的文字块吗?它和字符串有什么区别?了解文字块要解决的问题,并且能够准确使用文字块;......原创 2022-08-16 22:04:30 · 1027 阅读 · 0 评论 -
Day709.JShell -Java8后最重要新特性
JShell提供了一种在 JShell 状态下交互式评估 Java 编程语言的声明、语句和表达式的方法。JShell 的状态包括不断发展的代码和执行状态。为了便于快速调查和编码,语句和表达式不需要出现在方法中,变量和方法也不需要出现在类中。JShell 的设计并不是为了取代 IDE。JShell 在处理简单的小逻辑,验证简单的小问题时,比 IDE 更有效率。如果我们能够在有限的几行代码中,把要验证的问题表达清楚,JShell 就能够快速地给出计算的结果。这一点,能够极大地提高工作效率和学习热情。...原创 2022-08-15 21:41:58 · 593 阅读 · 0 评论