JDK新特性
JDK8 新特性:
-
lambda 表达式:允许把函数作为参数传递到方法(可以将Lambda表达式理解为一个匿名函数),简化匿名内部类代码。
-
函数式接口:使用 @FunctionalInterface 标识,有且仅有一个抽象方法,可被隐式转换为 lambda 表达式。
-
方法引用:可以引用已有类或对象的方法和构造方法,进一步简化 lambda 表达式。
-
接口:接口可以定义 default 修饰的默认方法,降低了接口升级的复杂性,还可以定义静态方法。
-
注解:引入重复注解机制,相同注解在同地方可以声明多次。注解作用范围也进行了扩展,可作用于局部变量、泛型、方法异常等。
-
类型推测:加强了类型推测机制,使代码更加简洁。
-
Optional 类:处理空指针异常,提高代码可读性。
-
Stream 类:引入函数式编程风格,提供了很多功能,使代码更加简洁。
方法包括 forEach 遍历、count 统计个数、filter 按条件过滤、limit 取前 n 个元素、skip 跳过前 n 个元素、map 映射加工、concat 合并 stream 流等。 -
日期:增强了日期和时间 API,新的 java.time 包主要包含了处理日期、时间、日期/时间、时区、时刻和时钟等操作。
(类LocalDate、LocalTime 和 LocalDateTime) -
JavaScript:提供了一个新的 JavaScript 引擎,允许在 JVM上运行特定 JavaScript 应用。
JDK 7:
- 数字可以用下划线分割
int a = 100_000_000; // 下划线只是为了让人更易读,Java编译器会去除这些下划线
- 加上前缀0b或0B就可以写二进制数
int a = 0b1001; // a=9;
JDK 10:
- 在Java 10中,如果可以从变量的初始值推导出它们的类型。那么可以用var关键字声明局部变量,而无须指定类型。
- 这样的优点是可以避免重复写类型名,可以直接从等号右边看出类型。
- var关键字只能用于方法中的局部变量。参数和字段的类型必须声明。
例如,可以不这样声明:
Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
可以写成这样:
var harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);