of() 方法
可以创建的类有 Set、 List、Map
List list = List.of();
Set s = Set.of();
Map m = Map.of();
也可以创建有值的集合
List list = List.of("value1","value2","value3");
Set s = Set.of("value1","value2","value3");
Map m = Map.of((1, "value1", 2, "value2", 3, "value3");
接口中引入私有方法
public interface TestInterface{
private static void displayCardDetails(){
// Method implementation goes here.
}
}
对Java7 提出的Try-With-Resources 用法进行了优化
下面是Java7的实现方式
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}
}
这是Java9的实现方式:
void testARM_Before_Java9() throws IOException{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}
}
文档的是如果我们有一个已经在Try-With-Resource语句外面声明为final或有效final的资源,那么我们就不需要声明一个局部变量。我们可以在Try-With-Resource语句中使用以前创建的变量,没有任何问题。
进行延时和超时操作,实用方法和更好的子类化的API
Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);
引入了一个新的 Reactive Streams API。
Java SE 9 Reactive Streams API 是一个发布订阅型框架,使我们能够非常简单地使用 Java 语言就能实现异步的、可拓展的和并行的应用。
**引入一个新的 Мulti-Resolution Image API。这个 API 中比较重要的接口是 MultiResolutionImage,在 java.awt.image 包下可获取到。用于封装不同高度和宽度图片(不同解决方案)到一个集合中,并允许我们按需查询使用。
引入新的 HTTP 2 Client API。它将同时支持 HTTP/1.1 和 HTTP/2 协议,也同时支持同步(Blocking Mode)和异步模式,支持 WebSocket API 使用中的异步模式。**
Java8中的Stream:
jshell> import java.util.stream.*
jshell> Stream stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
stream ==> java.util.stream.ReferencePipeline$Head@64bfbc86
jshell> stream.forEach(x -> System.out.println(x));
1
2
3
4
5
6
7
8
9
10
Java 9对Stream API进行了改进,向Java.util添加了四个有用的新方法:
dropWhile
takeWhile
iterate
ofNullable
由于流是一个接口,所以前两个新方法是默认方法,最后两个是静态方法。其中两个是非常重要的:dropWhile和takeWhile 方法。
在Stream API中,while()方法返回与谓词条件相匹配的最长前缀元素。
它以Predicate作为参数。Predicate是布尔表达式,它返回true或false。对于有序和无序的流,它的行为是不同的。让我们用下面一些简单的例子来探索它们。
default Stream<T> takeWhile(Predicate<? super T> predicate)
如果流是一个有序的,那么当takeWhile方法返回与该Predicate匹配的最长前缀时。结果流只包含与Predicate条件相匹配的前缀元素。
jshell> Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
stream ==> java.util.stream.ReferencePipeline$Head@55d56113
jshell> stream.takeWhile(x -> x < 4).forEach(a -> System.out.println(a))
1
2
3
由于这条流是有序的,所以takeWhile方法返回与Predicate相匹配的前三个元素。这里的Predicate是“元素必须小于4”。
无序的
jshell> Stream<Integer> stream = Stream.of(1,2,4,5,3,6,7,8,9,10)
stream ==> java.util.stream.ReferencePipeline$Head@55d56113
jshell> stream.takeWhile(x -> x < 4).forEach(a -> System.out.println(a))
1
2
由于这条流是无序的,所以takeWhile方法返回前两个与Predicate相匹配的元素。
在Stream API中,dropWhile()方法会删除与Predicate相匹配的最长前缀元素,并返回其余的元素。
jshell> Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10)
stream ==> java.util.stream.ReferencePipeline$Head@55d56113
jshell> stream.dropWhile(x -> x < 4).forEach(a -> System.out.println(a))
4
5
6
7
8
9
10
由于这条流是有序的,dropWhile()方法首先删除与Predicate相匹配的三个要素,并将剩余的元素返回到结果流中。这里我们的谓词是"元素必须小于4
Diamond 操作器和匿名内部类的改进
public List getEmployee(String empid){
// Code to get Employee details from Data Store
return new List(emp){ };
}
这里我们可以只使用“List”,而不指定类型参数。
删除了一些工具和组件
移除 rt.jar 和 tools.jar
移除JavaDB
删除了JVM TI 工具代理
删除jhat(Java Heap Analysis Tool)工具
删除 java-rmi.exe和java-rmi.cgi发射器
移除了Java VisualVM
从JMX RMIConnector中移除对IIOP传输的支持
删除native2ascii工具
更详细的内容可以去这里看下:https://www.journaldev.com/java
网友评论