从零开始学java - 第二十六天

这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

今天继续~

java9 新特性

模块系统

  • 一个包的容器,是java9最大的变化之一
  • 模块的代码被组织成多个包,每个包中包含Java类和接口
  • 模块的数据为一些资源文件和其他的静态信息

REPL(JShell)

  • 此英文的意思为交互式编程环境
  • 它允许你无需使用类或者方法包装来执行Java,可直接输入表达式并查看执行结果
  • 类似PythonIDE

改进的Javadoc

  • java9的Javadoc命令中的-html5参数可以让生成的文档支持HTML5

多版本兼容jar包

  • 多版本兼容可以实现在使用不同版本的Java时会动态的使用不同版本的class

集合工厂方法

  • Java9的List,Set和Map接口中,新的静态工厂方法可以创建这些集合的不可变实例

新的方法创建集合

static <E> List<E> of(E e1,E e2,E e3);
static <E> Set<E> of(E e1,E e2,E e3);
static <K,V> Map<K,V> of(K k1,V v1,K k2,V v2,K k3,V v3);
复制代码

私有接口方法

  • 在Java9中,一个接口能定义如下几种变量/方法:
    • 常量
    • 抽象方法
    • 默认方法
    • 静态方法
    • 私有方法
    • 私有静态方法
  • 接口中存在的私有方法就可以不用非要被实例化出来

改进的进程API

  • Java9向Process API添加了一个名为ProcessHandle的接口来增强Java.lang.Process类
  • ProcessHandle接口的实例标识一个本地进程,它允许查询进程状态并管理进程

改进的Stream API

  • Java9新添加了一些遍历的方法,使流处理更容易,并使用收集器编写复杂的查询

takeWhile方法

  • 使用一个断言作为参数,如果流的执行中与断言相符合的话返回断言前的东西,否则返回一个空的Stream
default Stream<T> takeWhile(Predicate<? super T>predicate)
复制代码
import java.util.stream.Stream;

public class Test{
    public static void main(String[] args){
        Stream.of("1","2","3","","5").takeWhile(s->!s.isEmpty()).forEach(System.out::print);
    }
}
复制代码
  • 输出123

ps:流执行1~5,4为空,isEmpty()判断是否为空,加上!取反,所有不为空的放过,为空的拦下

dropWhile方法

  • takeWhile作用相反,碰到空的字符串时开始进行输出
default Stream<T> dropWhile(Predicate<? super T>predicate)
复制代码
  • 比如上面的例子如果改成dropWhile就只会输出5

iterate方法

  • 可与for循环进行相对应的理解
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
复制代码
java.util.stream.IntStream;
public class Test {
    public static void main(String[] args) { 
        IntStream.iterate(3, x -> x < 10, x -> x+ 3).forEach(System.out::println); 
    }
}
复制代码

ps:代码输出3,6,9

ofNullable方法

  • 可以防止元素为null的异常,如果不是null正常返回,如果是null返回空
static <T> Stream<T> ofNullable(T t)
复制代码

今天就学到这里,明天继续Java9的新特性,晚安~

猜你喜欢

转载自juejin.im/post/7034781262581596174
今日推荐