JShell
交互式执行java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| jshell> int a=10 a ==> 10
jshell> a*7+5 $30 ==> 75
jshell> System.out.println("hello") hello
jshell> void method(int x, int y) { ...> System.out.println(x+y); ...> } | 已修改 方法 method(int,int)
jshell> method(10,20); 30
|
不可变List, Set, Map
Immutable List
1 2 3 4 5 6 7 8 9 10 11 12
| jshell> List l = List.of(1,2,3); l ==> [1, 2, 3]
jshell> l.add(4); | 警告: | 对作为原始类型java.util.List的成员的add(E)的调用未经过检查 | l.add(4); | ^------^ | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableList.add (ImmutableCollections.java:77) | at (#36:1)
|
Immutable Set
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| jshell> Set set = Set.of(1,2,3); set ==> [1, 3, 2]
jshell> set.add(4); | 警告: | 对作为原始类型java.util.Set的成员的add(E)的调用未经过检查 | set.add(4); | ^--------^ | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableSet.add (ImmutableCollections.java:281) | at (#38:1)
|
Immutable Map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| jshell> Map.of() $39 ==> {}
jshell> Map map = Map.of(1, "a", 2, "b", 3, "c"); map ==> {1=a, 3=c, 2=b}
jshell> map.put(4, "d"); | 警告: | 对作为原始类型java.util.Map的成员的put(K,V)的调用未经过检查 | map.put(4, "d"); | ^-------------^ | java.lang.UnsupportedOperationException thrown: | at ImmutableCollections.uoe (ImmutableCollections.java:71) | at ImmutableCollections$AbstractImmutableMap.put (ImmutableCollections.java:558) | at (#41:1)
|
接口私有方法 Private Method in interface
com.interfaces.PrivateMethod
模块化 Module System
- com.hello
- com.hello.client
Process API
1 2 3 4 5 6
| jshell> ProcessHandle currentProcess = ProcessHandle.current(); currentProcess ==> 3214
jshell> System.out.println("Current Process Id: = " + currentProcess.pid()); Current Process Id: = 3214
|
资源对象的try/catch
1 2 3 4 5 6 7 8
| jshell> void tryResource() throws IOException { ...> BufferedReader reader1 = new BufferedReader(new FileReader("/tmp/a.txt")); ...> try (reader1) { ...> System.out.println(reader1.readLine()); ...> } ...> } | 已修改 方法 tryResource()
|
Stream api improvements
com.stream.StreamTest
optional
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| jshell> Optional.of(1) $46 ==> Optional[1]
jshell> Optional.empty(); $47 ==> Optional.empty
jshell> Optional.of(1).ifPresentOrElse(x -> System.out.println("get:" + x), () -> System.out.println("cannot get")) get:1
jshell> Optional.empty().ifPresentOrElse(x -> System.out.println("get:" + x), () -> System.out.println("cannot get")) cannot get
jshell> Optional.empty().or(() -> Optional.of(2)) $50 ==> Optional[2]
|
HTTP 2 Client API
api改进
支持web socket 等
GC
- CMS垃圾回收算法不再推荐使用; 推荐性能更好的G1算法
- GC算法之间的绑定关系被取消
other
java docs改进
源代码
本文全部源代码:https://github.com/wangsaisai/java-9-tutorial.git