JDK11 的 11 个谜题:Hanno Embregts 在 Devoxx UK 阐述对 Java 认证的理解

简介: Hanno Embregts向 Devoxx 的听众分享了他在获得Oracle Java 11认证的过程中学到的 11 件”疯狂的事情“。尽管他已经有接近 15 年的职业生涯,但他依然会吸收 Java 中这些新奇的东西,并将它们作为日后惯常的实践。

JDK11的11个谜题:Hanno Embregts在Devoxx UK阐述对Java认证的理解
Hanno Embregts向 Devoxx 的听众分享了他在获得Oracle Java 11认证的过程中学到的 11 件”疯狂的事情“。尽管他已经有接近 15 年的职业生涯,但他依然会吸收 Java 中这些新奇的东西,并将它们作为日后惯常的实践。

当被问到认证过程中的最大收获时,Embregts 说到:

在自己的编码世界里面,尽管我觉得已经到了很高超的水准,但是我依然意识到作为专业的开发人员,我们需要投入时间来不断丰富对所使用工具的知识。这将会提高我们的生产力。

由于开发人员喜欢潜心研究代码,所以这个演讲没有展示讲义,而是展示了11个单元测试(UT),其中每个UT代表了一个“谜题”。

谜题11:数组类型定义

组合使用本地类型推断和[]会导致无法编译

C 风格的数组定义需要针对每个变量重复进行,它是不可复制的。

谜题10:流排序只针对Comparable对象有效

如果你尝试对一个对象的流进行排序,而目标对象不是Comparable(也就是实现了compareTo(...)方法)对象的话,那么将会抛出RuntimeException。

谜题9:接口中的静态方法只允许在包含该方法的接口中进行调用

如果从类中尝试访问接口的静态方法将无法编译通过。

谜题8:在枚举中创建匿名子类来覆盖枚举的功能

不要覆盖定义在枚举中的方法,这有可能会产生意料之外的行为。为了确保达到预期的效果,这些方法可以而且需要在匿名内类中进行重写。

谜题7:根据不同的类型,除以零会有不同的行为

对于 int 或 long 类型,除以数字零会抛出一个ArithmeticException,但是如果使用浮点数(float 或 double)的话,将会得到POSITIVE_INFINITY。

谜题6:方法重载参数的优先级因所使用类型的不同而不同

当编译器无法找到准确的类型时,它将扩展至更广泛的原始类型,如果原始类型也不可用的话,它将会尝试装箱原始类型或可变参数(varargs)。

谜题5:如果 Switch 语句试图涵盖多个场景的话,可能会产生令人疑惑的结果。使用“|”操作符来涵盖两个不同的场景(case)可能会产生预料之外的结果,因为它会作为一个位操作符,而操作的结果会被 switch 语句用来匹配适当的类别。

谜题4:处理克隆的数组、不可变集合和不可变类时的相等性

Java 的克隆操作是浅克隆,因此,它会指向与原始数组或集合中相同的对象。在这种情况下,使用“==”比较两个数组会产生 false,但是使用Object.equals(...)方法会生成 true。

谜题3:数字化的包装器对象

为了进行优化,Java 将值在-128 和 127 之间的数字进行了缓存。因此,这个范围的数字在装箱时,总会解析成相同的引用。

谜题2:函数式接口

Java 中的函数式接口应该只有一个方法并且要使用@FunctionalInterface注解。

谜题1:向方法引用传递参数

Embregts 认为,每天开车上下班不一定保证你能够成为一个专业的司机,每天编码也不能保证你成为一个专业的编码人员。因此,从这个角度出发,花费时间更深入地了解开发人员日常工作中使用的框架和语言,这将有助于提高编写代码的质量,避免某些操作出现意料之外的结果和棘手的 bug。这种类型的学习也可以帮助我们更具有生产力。

JDK 11的采用率正在不断增长,到 2021 年底,它已经与 JDK 8 持平了。

作者简介:

Olimpiu Pop,软件工程师,拥有从金融软件到 IAM 的实际经验。热衷于工具化和优化开发流程。在欧洲 IDaaS 的 iWelcome 担任工程主管。Transylvania JUG 的组织者--我很想做更多这样的事情。罗马尼亚 Voxxed 项目委员会成员,希望在不久的将来能成为演讲者。JavaAdventCalendar 的主编。

原文链接:

11 Puzzles from JDK11: Hanno Embregts on Java Certification at Devoxx UK

目录
相关文章
|
2月前
|
存储 Java Maven
使用Java实现OAuth 2.0认证授权
使用Java实现OAuth 2.0认证授权
|
13天前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
41 11
|
11天前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
14天前
|
Oracle Java 关系型数据库
【颠覆性升级】JDK 22:超级构造器与区域锁,重塑Java编程的两大基石!
【9月更文挑战第6天】JDK 22的发布标志着Java编程语言在性能和灵活性方面迈出了重要的一步。超级构造器和区域锁这两大基石的引入,不仅简化了代码设计,提高了开发效率,还优化了垃圾收集器的性能,降低了应用延迟。这些改进不仅展示了Oracle在Java生态系统中的持续改进和创新精神,也为广大Java开发者提供了更多的可能性和便利。我们有理由相信,在未来的Java编程中,这些新特性将发挥越来越重要的作用,推动Java技术不断向前发展。
|
26天前
|
Java 开发工具
【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
|
1月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
1月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
1月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
19天前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
63 0
|
19天前
|
开发者 C# 容器
【独家揭秘】当WPF邂逅DirectX:看这两个技术如何联手打造令人惊艳的高性能图形渲染体验,从环境搭建到代码实践,一步步教你成为图形编程高手
【8月更文挑战第31天】本文通过代码示例详细介绍了如何在WPF应用中集成DirectX以实现高性能图形渲染。首先创建WPF项目并使用SharpDX作为桥梁,然后在XAML中定义承载DirectX内容的容器。接着,通过C#代码初始化DirectX环境,设置渲染逻辑,并在WPF窗口中绘制图形。此方法适用于从简单2D到复杂3D场景的各种图形处理需求,为WPF开发者提供了高性能图形渲染的技术支持和实践指导。
49 0