java9最新消息_Java9新特性

模块化技术

模块由通常的类和新的模块声明文件(module-info.java)组成。 该文件是位于 java 代码结构的顶层,该模块描述符明确地定义了我们的模块需要什么依赖关系,以及哪些模块被外部使用

设计目的

减少内存的开销

只须必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护

改进 Java SE 平台,使其可以适应不同大小的计算设备

改进其安全性,可维护性,提高性能

使用举例

/**

* requires:指明对其它模块的依赖

*/

module java9demo {

requires java9test;

requires java.logging;

requires junit;

}

/**

* exports:控制着哪些包可以被其它模块访问到。所有不被导出的包 默认都被封装在模块里面

*/

module java9test {

exports com.liuhuan.study;

}

jShell命令

设计目的

即写即得、快速运行

使用举例

调用命令

fb38b775829fab88634460513bf8a556.png

获取帮助

5d461dfc909c35ed9c6da951cfe22151.png

基本使用

d23bd30c80a104f5eb54edf68a7cfb16.png

导包

f7ea74d6cbbeb948a6a548cf137d9c07.png

默认已经导入的包

8c0ed83c8f05e8bf8571b4e4403702fa.png

使用外部编辑器编写代码

c0030073640c51b078e889efd28ea143.png

退出

91309e800df9ab57a314caad806e01ad.png

接口中的私有方法

Java 8 中规定接口中的方法除了抽象方法之外,还可以定义静态方法和默认的方法。一定程度上,扩展了接口的功能,此时的接口更 像是一个抽象类。在 Java 9 中,接口更加的灵活和强大,连方法的访问权限修饰符都可以声明为 private 的了,此时方法将不会成为你对外暴露的 API 的一部分

使用举例

public interface MyInterface {

void normalInterfaceMethod();

default void methodDefault1() {

init();

}

private void init() {

System.out.println("默认方法中的通用操作");

}

}

class MyInterfaceImpl implements MyInterface {

@Override

public void normalInterfaceMethod() {

System.out.println("实现接口的方法");

}

public static void main(String[] args) {

MyInterface impl = new MyInterfaceImpl();

impl.methodDefault1();

}

}

钻石操作符(Diamond Operator)使用升级

能够在匿名实现类中使用钻石操作符

使用举例

private List flattenStrings(List... lists) {

Set set = new HashSet<>() {};

for (List list : lists) {

set.addAll(list);

}

return new ArrayList<>(set);

}

try语句关闭资源

使用举例

InputStreamReader reader = new InputStreamReader(System.in);

OutputStreamWriter writer = new OutputStreamWriter(System.out);

//reader、writer使用之后会自动关闭

try(reader;writer){

//reader、writer 是 final 的,不可再被赋值

}catch (IOException e){

e.printStackTrace();

}

String、StringBuffer、StringBuilder存储结构变更

String存储结构由char变更为byte,增加了一个字符编码的表识,对于存储非中文字符可以减少一半的存储空间

java8

/** The value is used for character storage. */

private final char value[];

java9

private final byte[] value;

集合工厂方法:快速创建只读集合

使用举例

List list = List.of("a", "b", "c"); Set set = Set.of("a", "b", "c");

Map map1 = Map.of("Tom", 12, "Jerry", 21, "Lilei", 33, "HanMeimei", 18);

Map map2 = Map.ofEntries( Map.entry("Tom", 89),

Map.entry("Jim", 78),

Map.entry("Tim", 98)

);

Stream API增强

takeWhile()的使用:

用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的 Stream 中,takeWhile 返回从开头开始的尽量多的元素

List list = Arrays.asList(45,43,76,87,42,77,90,73,67,88);

list.stream().takeWhile(x -> x < 50)

.forEach(System.out::println);

System.out.println();

list = Arrays.asList(1,2,3,4,5,6,7,8);

list.stream().takeWhile(x -> x < 5)

.forEach(System.out::println);

dropWhile()的使用:

dropWhile 的行为与 takeWhile 相反,返回剩余的元素。

List list = Arrays.asList(45,43,76,87,42,77,90,73,67,88);

list.stream().dropWhile(x -> x < 50)

.forEach(System.out::println);

System.out.println();

list = Arrays.asList(1,2,3,4,5,6,7,8);

list.stream().dropWhile(x -> x < 5)

.forEach(System.out::println);

ofNullable()的使用:

Java 8 中 Stream 不能完全为 null,否则会报空指针异常。而 Java 9 中的ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可 以创建一个空 Stream

//报 NullPointerException

//Stream stream1 = Stream.of(null);

//System.out.println(stream1.count());

//不报异常,允许通过

Stream stringStream = Stream.of("AA", "BB", null);

System.out.println(stringStream.count());//3

//不报异常,允许通过

List list = new ArrayList<>();

list.add("AA");

list.add(null);

System.out.println(list.stream().count());//2

//ofNullable():允许值为 null

Stream stream1 = Stream.ofNullable(null);

System.out.println(stream1.count());//0

Stream stream = Stream.ofNullable("hello world");

System.out.println(stream.count());//1

iterator()重载的使用

//原来的控制终止方式:

Stream.iterate(1,i -> i + 1).limit(10).forEach(System.out::println);

//现在的终止方式:

Stream.iterate(1, i -> i < 100, i -> i + 1) .forEach(System.out::println);

Optional 类中 stream()的使用:

List list = new ArrayList<>();

list.add("Tom");

list.add("Jerry");

list.add("Tim");

Optional> optional = Optional.ofNullable(list);

Stream> stream = optional.stream();

stream.flatMap(x -> x.stream()).forEach(System.out::println);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值