java8 新特性
一、Lambda表达式
二、方法引用
三、默认方法、静态方法(接口)
四、Stream流
五、Optional工具类
六、DateTime日期时间时区操作
1.Clock类
Clock类使用时区来返回当前的纳秒时间和日期。Clock可以替代System.currentTimeMillis()和TimeZone.getDefault(),实例如下:
final Clock clock = Clock.systemUTC();
System.out.println( clock.instant() );
System.out.println( clock.millis() );
结果:
2021-02-24T12:24:54.678Z
1614169494678
2.LocalDate、LocalTime 和 LocalDateTime类
LocalDate、LocalTime 和 LocalDateTime 类,都是用于处理日期时间的 API,在处理日期时间时可以不用强制性指定时区。
- 2.1.LocalDate
LocalDate 仅仅包含ISO-8601日历系统中的日期部分,实例如下:
//获取当前日期
final LocalDate date = LocalDate.now();
//获取指定时钟的日期
final LocalDate dateFromClock = LocalDate.now( clock );
System.out.println( date );
System.out.println( dateFromClock );
结果:
2021-02-24
2021-02-24
- 2.2.LocalTime
LocalTime 仅仅包含该日历系统中的时间部分,实例如下:
//获取当前时间
final LocalTime time = LocalTime.now();
//获取指定时钟的时间
final LocalTime timeFromClock = LocalTime.now( clock );
System.out.println( time );
System.out.println( timeFromClock );
结果:
20:36:16.315
20:36:16.315
- 2.3.LocalDateTime
LocalDateTime 类包含了 LocalDate 和 LocalTime 的信息,但是不包含 ISO-8601 日历系统中的时区信息,实例如下:
//获取当前日期时间
final LocalDateTime datetime = LocalDateTime.now();
//获取指定时钟的日期时间
final LocalDateTime datetimeFromClock = LocalDateTime.now( clock );
System.out.println( datetime );
System.out.println( datetimeFromClock );
结果:
2021-02-24T20:38:13.633
2021-02-24T20:38:13.633
3.ZonedDateTime类
如果你需要特定时区的信息,则可以使用 ZoneDateTime,它保存有 ISO-8601 日期系统的日期和时间,而且有时区信息,实例如下:
// 获取当前时间日期
final ZonedDateTime zonedDatetime = ZonedDateTime.now();
//获取指定时钟的日期时间
final ZonedDateTime zonedDatetimeFromClock = ZonedDateTime.now( clock );
//获取纽约时区的当前时间日期
final ZonedDateTime zonedDatetimeFromZone = ZonedDateTime.now( ZoneId.of("America/New_York") );
System.out.println( zonedDatetime );
System.out.println( zonedDatetimeFromClock );
System.out.println( zonedDatetimeFromZone );
结果:
2021-02-24T20:42:27.238+08:00[Asia/Shanghai]
2021-02-24T12:42:27.238Z
2021-02-24T07:42:27.241-05:00[America/New_York]
4.Duration类
Duration类,它持有的时间精确到秒和纳秒。利用它我们可以很容易得计算两个日期之间的不同,实例如下:
final LocalDateTime from = LocalDateTime.of( 2020, Month.APRIL, 16, 0, 0, 0 );
final LocalDateTime to = LocalDateTime.of( 2021, Month.APRIL, 16, 23, 59, 59 );
//获取时间差
final Duration duration = Duration.between( from, to );
System.out.println( "Duration in days: " + duration.toDays() );
System.out.println( "Duration in hours: " + duration.toHours() );
结果:
Duration in days: 365
Duration in hours: 8783
七、Base64
在 Java 8中,Base64 编码已经成为 Java 类库的标准,实例如下:
public class Tester {
public static void main(String[] args) {
final String text = "Base64 finally in Java 8!";
final String encoded = Base64.getEncoder().encodeToString( text.getBytes( StandardCharsets.UTF_8 ) );
System.out.println( encoded );
final String decoded = new String(Base64.getDecoder().decode( encoded ), StandardCharsets.UTF_8 );
System.out.println( decoded );
}
}
结果:
QmFzZTY0IGZpbmFsbHkgaW4gSmF2YSA4IQ==
Base64 finally in Java 8!
新的 Base64API 也支持 URL 和 MINE 的编码解码,详情可以查看具体类方法。
八、Nashorn JavaScript 引擎
参考链接:
- 链接:[link](Java8 新特性全面介绍 - 程序员志哥的文章 - 知乎
https://zhuanlan.zhihu.com/p/439176814)