这是我参与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的新特性,晚安~