@levinzhang
2022-05-22T14:27:55.000000Z
字数 1769
阅读 412
by
Hanno Embregts向Devoxx的听众分享了他在获得Oracle Java 11认证的过程中学到的11件疯狂的事情。尽管他已经有接近15年的职业生涯,但他依然会吸收Java中这些新奇的东西,并将它们作为日后惯常的实践。
Hanno Embregts向Devoxx的听众分享了他在获得Oracle Java 11认证的过程中学到的11件”疯狂的事情“。尽管他已经有接近15年的职业生涯,但他依然会吸收Java中这些新奇的东西,并将它们作为日后惯常的实践。
当被问到认证过程中的最大收获时,Embregts说到:
在自己的编码世界里面,尽管我觉得已经到了很高超的水准,但是我依然意识到作为专业的开发人员,我们需要投入时间来不断丰富对所使用工具的知识。这将会提高我们的生产力。
由于开发人员喜欢潜心研究代码,所以这个演讲没有展示讲义,而是展示了11个单元测试(UT),其中每个UT代表了一个“谜题”。
组合使用本地类型推断和[]会导致无法编译
C风格的数组定义需要针对每个变量重复进行,它是不可复制的。
如果你尝试对一个对象的流进行排序,而目标对象不是Comparable(也就是实现了compareTo(...)方法)对象的话,那么将会抛出RuntimeException。
如果从类中尝试访问接口的静态方法将无法编译通过。
不要覆盖定义在枚举中的方法,这有可能会产生意料之外的行为。为了确保达到预期的效果,这些方法可以而且需要在匿名内类中进行重写。
对于int或long类型,除以数字零会抛出一个ArithmeticException,但是如果使用浮点数(float或double)的话,将会得到POSITIVE_INFINITY。
当编译器无法找到准确的类型时,它将扩展至更广泛的原始类型,如果原始类型也不可用的话,它将会尝试装箱原始类型或可变参数(varargs)。
谜题5:如果Switch语句试图涵盖多个场景的话,可能会产生令人疑惑的结果。使用“|”操作符来涵盖两个不同的场景(case)可能会产生预料之外的结果,因为它会作为一个位操作符,而操作的结果会被switch语句用来匹配适当的类别。
Java的克隆操作是浅克隆,因此,它会指向与原始数组或集合中相同的对象。在这种情况下,使用“==”比较两个数组会产生false,但是使用Object.equals(...)方法会生成true。
为了进行优化,Java将值在-128和127之间的数字进行了缓存。因此,这个范围的数字在装箱时,总会解析成相同的引用。
Java中的函数式接口应该只有一个方法并且要使用@FunctionalInterface注解。
Embregts认为,每天开车上下班不一定保证你能够成为一个专业的司机,每天编码也不能保证你成为一个专业的编码人员。因此,从这个角度出发,花费时间更深入地了解开发人员日常工作中使用的框架和语言,这将有助于提高编写代码的质量,避免某些操作出现意料之外的结果和棘手的bug。这种类型的学习也可以帮助我们更具有生产力。
JDK 11的采用率正在不断增长,到2021年底,它已经与JDK 8持平了。
软件工程师,拥有从金融软件到IAM的实际经验。热衷于工具化和优化开发流程。在欧洲IDaaS的iWelcome担任工程主管。
Transylvania JUG的组织者--我很想做更多这样的事情。
罗马尼亚Voxxed项目委员会成员,希望在不久的将来能成为演讲者。
JavaAdventCalendar的主编。
查看英文原文:11 Puzzles from JDK11: Hanno Embregts on Java Certification at Devoxx UK