jdk8新特性(8u202最后商业免费版)

要点

2014-03-18发布

lambda、stream、新日期、新注解

jdk-8u202:最后一个免费商用版本,Oracle于 2019-01-15 停止免费商用更新

Java SE 8 (8u211 and later)

Java SE 8 (8u202 and earlier)

These Java SE 8 update releases are provided under the Java SE OTN License.
Java SE 8u202 and older updates are available, under the Binary Code License (“BCL”).

语言

lambda

有别于面向对象的方式,lambda是面向函数的

FunctionalInterface:第一次可以把函数作为参数,这个就很强大了

默认方法:在接口中直接提供方法的默认实现,如

java.lang.Iterable {
    default void forEach(Consumer action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
}

类库

Stream API:数据源 → Stream → 中间操作 → 终端操作,还有并行流支持

List ret = Arrays.asList("key#1", "demo1").stream().filter(v -> v.startsWith("key#")).collect(Collectors.toList());

Date

JDK7:TimeZone时区、Calendar日历、DateFormat解析和格式化

JDK8:详见java.time包

// 时间戳
Instant inst = Instant.now();
// 本地日期
LocalDate localDate = LocalDate.now();
// 本地时刻
LocalTime localTime = LocalTime.now();
// 本地日期和时刻
LocalDateTime localDateTime = LocalDateTime.now();
// 带时区的日期时刻
ZonedDateTime zonedDateTime = ZonedDateTime.now();
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse("2019-11-25", formatter);

Optional类:目标是解决NPE

我的最佳实践是不使用Optional,但要遵循:empty集优于null,T[0]优于null;

另外obj != null比Optional.isPresent()可读性更高

其他优化:HashMap中链表引入红黑树、ConcurrentHashMap并发优化等

Nashorn:新的javascript引擎,在生产中用于动态逻辑(业务逻辑存储在数据库中),性能还不错。

jjs工具:可以用java写脚本,如test.sh

#!你的jdk8路径/bin/jjs
var text = 'hello,这是一段明文,ahaa';
print(text);

你可能感兴趣的:(jdk8新特性(8u202最后商业免费版))