Java9发布于2017年9月发布,带来了很多新特性,其中最主要的变化是模块化系统。
模块就是代码和数据的封装体,模块的代码被组织成多个包,每个包中包含Java类和接口,模块的数据则包括资源文件和其他静态信息。
模块化的使用
语法格式
- 在 module-info.java 文件中,用新的关键词module来声明一个模块,具体如下:
- module 模块名称 { }
模块化的优势
- 减少内存的开销
- 可简化各种类库和大型应用的开发和维护
- 安全性,可维护性,提高性能
钻石操作符的使用升级
-
在Java9中允许在匿名内部类的使用中使用钻石操作符
-
import java.util.Comparator; public class DiamondTest { public static void main(String[] args) { // 实现匿名内部类和钻石操作符的搭配使用 // new 后面<>中的Integer可省略 //Comparator<Integer> comparator = new Comparator<Integer>() { Comparator<Integer> comparator = new Comparator<>() { @Override public int compare(Integer o1, Integer o2) { return 0; } }; } }
集合工厂方法
基本概念
-
Java9的List、Set和Map集合中增加了静态工厂方法of实现不可变实例的创建
-
不可变体现在无法添加、修改和删除它们的元素
-
不允许添加null元素对象
-
import java.util.List; import java.util.Map; import java.util.Set; public class CollectionTest { public static void main(String[] args) { // 创建List类型的不可变实例 List<Integer> list = List.of(1, 2, 3, 4, 5); //list.add(6); // 编译ok,运行发生UnsupportedOperationException不支持此操作的异常 System.out.println(list); // [1, 2, 3, 4, 5] Set<Integer> set = Set.of(6, 7, 8); //set.add(null);// 编译ok,运行发生UnsupportedOperationException不支持此操作的异常 Map<Integer, String> map = Map.of(1, "one", 2, "two"); //map.put(3, "three");// 编译ok,运行发生UnsupportedOperationException不支持此操作的异常 } }
实际意义
- 保证线程安全:在并发程序中既保证线程安全性,也大大增强了并发时的效率
- 被不可信的类库使用时会很安全
- 如果一个对象不需要支持修改操作,将会节省空间和时间的开销
- 可以当作一个常量来对待,并且这个对象在以后也不会被改变
InputStream的增强
- InputStream类中提供了transferTo方法实现将数据直接传输到OutputStream中