JDK 23 新特性一览
1. JEP 455: 原始类型在模式、instanceof 和 switch 中的使用 预览功能,允许在所有模式上下文中使用原始类型模式,并扩展 instanceof 和 switch 以处理所有原始类型。
2. JEP 466: 类文件 API 第二次预览,提供标准 API 用于解析、生成和转换 Java 类文件。
3. JEP 467: Markdown 文档注释 允许在 Javadoc 文档注释中使用 Markdown 语法。
4. JEP 469: 向量 API 第八次孵化,引入了一种 API 来表达向量计算。
5. JEP 471: 弃用 sun.misc.Unsafe 中的内存访问方法 这些方法之前被用于直接访问内存,在未来的版本中将它们移除。
6. JEP 473: 流收集器 第二次预览,增强了 Stream API 以支持自定义中间操作。
7. JEP 474: ZGC: 代模式 将 Z 垃圾收集器的默认模式切换为代模式,以提高 Java 应用的性能。
8. JEP 476: 模块导入声明 预览功能,允许开发者简洁地导入模块导出的所有包。
9. JEP 477: 隐式声明类和实例主方法 第三次预览,简化初学者编写第一个程序的学习曲线。
10. JEP 480: 结构化并发 第三次预览,通过引入结构化并发的 API 来简化并发编程。
11. JEP 481: 作用域值 第三次预览,允许在线程内和跨线程共享不可变数据。
12. JEP 482: 灵活构造函数体 第二次预览,允许在显式构造函数调用之前出现语句。
变化的特性,不变的原则
不少 Java 编程初学者会在学习语言特性上投入许多时间,其实对于编写程序来说,这并非必要的。编程的核心在于解决问题的思路和方法,掌握那些经过时间检验的编程原则更为重要。
随着时间的推移,编程语言的特性还会持续变化,但编程原则却会历久弥新,指导程序员编写出可读性高、可维护性强、健壮且高效的代码。
《Effective Java》这本书早在 2001 年就出版了第1版,那时 Java 语言也才诞生不久,此书以实用、深刻的见解和丰富的示例代码,深受 Java 开发者推崇,并获得了有软件业“奥斯卡奖”之称的 Jolt 大奖,被誉为 “Java 四大名著”之一。
后来,随着 Java 语言的重大版本升级,《Effective Java》贴合 Java 语言特性的变化,陆续推出了第2版、第3版。“Java 之父” James Gosling 这样评价这本书:“我很希望我 10 年前就能拥有这本书。有人可能认为我不需要任何 Java 方面的书籍,但是我需要这本书。”
本书作者 Joshua Bloch 也是一位技术实力超群的大神,他早先在 Sun 公司担任杰出工程师,后在谷歌担任首席 Java 架构师。他领导设计和实现了众多 Java 平台特性,包括 JDK 5.0 语言增强版和经典的 Java Collections Framework。
90条编程原则,成就Java高手之路
· 创建和销毁对象:条目 1 - 9,讨论了对象的创建模式,包括静态工厂方法、构造器的使用、单例模式、依赖注入、不必要的对象创建、对象引用清除、终结方法和 try-with-resources 语句等。
· 对所有对象都通用的方法:条目 10 - 14,涵盖了所有 Java 对象都应该考虑重写的方法,如 equals、hashCode、toString、clone 和 Comparable 接口的实现。
· 类和接口:条目 15 - 25,提供了关于如何设计类和接口的指导,包括最小化可访问性、使用访问器方法、控制可变性、组合与继承的选择、接口与抽象类的使用等。
· 泛型:条目 26 - 33,讲述了泛型的正确使用方式、避免类型擦除问题、如何设计泛型类和方法,以及如何处理泛型与可变参数的结合。
· 枚举和注解:条目 34 - 41,介绍了枚举类型的优势和用法、如何用枚举代替常量,以及注解的恰当使用。
· Lambda表达式和流:条目 42 - 48,讨论了 Java 8 引入的 Lambda 表达式和流 API 的使用,包括函数式接口、方法引用、Stream 的操作和性能注意事项。
· 方法:条目 49 - 56,提供了方法设计的最佳实践,包括参数验证、方法签名设计、重载和可变参数的使用,以及如何编写文档注释。
· 通用编程:条目 57 - 68,涵盖了Java编程中的一些通用技术,如局部变量作用域最小化、for-each 循环、基本类型与封装类的选择、字符串操作和优化等。
· 异常:条目 69 - 77,讲述了异常处理的策略,包括何时使用异常、如何设计异常层次结构、文档中异常的声明和处理等。
· 并发:条目 78 - 84,探讨了并发编程的挑战和解决方案,如何使用同步、并发工具、延迟初始化和避免线程调度器依赖等。
· 序列化:条目 85 - 90,讨论了对象序列化的问题和替代方案、如何安全地实现Serializable接口,以及序列化代理模式的使用。
结语