Java-语法糖
自动装箱与拆箱
Java 5引入了自动装箱和拆箱,允许基本数据类型和它们的包装类之间自动转换。
1 | Integer num = 10; // 自动装箱 |
增强型for循环
也称为for-each循环,用于简化数组或集合的遍历。
1 | int[] numbers = {1, 2, 3, 4, 5}; |
泛型
提供了类型安全的检查,并消除了类型转换的需要。
1 | List<String> list = new ArrayList<>(); |
可变参数
允许方法接收任意数量的参数。
1 | public void printNumbers(int... numbers) { |
try-with-resources
自动管理资源的关闭,适用于实现了AutoCloseable接口的资源。
1 | try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { |
Lambda表达式
Java 8引入,简化了函数式接口的实现。
1 | List<String> list = Arrays.asList("a", "b", "c"); |
方法引用
Lambda表达式的简化形式,直接引用已有方法。
1 | list.forEach(System.out::println); |
三目运算
虽然不是新特性,但三元运算符提供了一种简洁的方式来根据条件选择一个值。
示例代码:
1 | int a = 5; |
字符串连接
从Java 5开始,字符串连接被优化为StringBuilder操作。
1 | String message = "Hello, " + "world!"; |
Switch表达式
Java 12引入,使switch语句更加简洁和灵活。
1 | int day = 5; |
类型推断
Java 10引入,允许使用var关键字声明变量,编译器自动推断类型。 java var list = new ArrayList<String>(); list.add("Hello");
Optional 类
Java 8 引入了 Optional
类,旨在提供一种更清晰、更安全的方式来处理可能为空的对象。这避免了显式的 null
检查,减少了空指针异常的风险。
1 | Optional<String> optional = Optional.ofNullable(getString()); |
Stream API
Java 8 引入的 Stream API 为集合提供了一种声明式的处理方式,支持对集合进行复杂的查询和操作,如过滤、排序、聚合等。
1 | List<String> strings = Arrays.asList("a", "b", "c"); |
接口私有方法
Java 9 允许在接口中定义私有方法,这使得接口可以提供默认方法的实现,同时保持接口的简洁性。
1 | public interface MyInterface { |
局部变量类型推断的增强
Java 10 进一步增强了局部变量类型推断,引入了 var
关键字,允许在 lambda 表达式中使用,使得代码更加简洁。
1 | var list = new ArrayList<>(); |
模块化系统
Java 9 引入了模块化系统(Jigsaw 项目),允许将 Java 应用程序分割成更小、更易于管理的部分。这有助于提高代码的可维护性和安全性。
1 | module mymodule { |
文本块
Java 15 引入了文本块(Text Blocks),这是一种多行字符串字面量,可以跨越多行而不需要转义。
1 | String html = """ |
记录(Records)
Java 16 引入了记录(Records),这是一种特殊的类,用于存储不可变的数据。记录提供了一种简洁的方式来创建不可变的数据载体。
1 | record Point(int x, int y) {} |
密封类
Java 16 预览版引入了密封类(Sealed Classes),这是一种限制类继承的方式,可以提高代码的安全性和可预测性。
1 | sealed class Shape permits Circle, Rectangle, Square { |
这些语法糖特性使得Java代码更加简洁和易读,但它们并不增加语言本身的功能,只是对已有功能的一种简化和封装。Java 语言不断演进,引入了许多语法糖和新特性,以提高开发效率、代码质量和应用程序的性能。