目录
1. JShell
- 1. JShell
- 2. var"关键字"
- 3. Java集合新增API
- 4. String新增API
- 5. InputStream.transferTo方法
- 6. Java原生的HTTP客户端
- 7. java命令直接运行单个.java文件
- 8. ZGC垃圾收集器
是Java的交互式客户端
[root@bigdata001 opt]# zulu11.56.19-ca-jdk11.0.15-linux_x64/bin/jshell
5月 29, 2022 1:38:14 下午 java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
| 欢迎使用 JShell -- 版本 11.0.15
| 要大致了解该版本, 请键入: /help intro
jshell> System.out.println(
...> "hello world"
...> )
hello world
jshell> /help
2. var"关键字"
能进行局部变量类型推断。局部变量是在方法中申明的变量,不能用于类中的属性。如下所示
jshell> List list = new ArrayList()
list ==> []
jshell>
jshell> var str = "hello world"
str ==> "hello world"
jshell>
jshell> Consumer consumer = (@Deprecated var str) -> System.out.println(str.toUpperCase())
consumer ==> $Lambda$24/0x00000008000b5c40@5e3a8624
jshell> consumer.accept("hello world")
HELLO WORLD
jshell>
3. Java集合新增API
jshell> List list = List.of(1, 2, 3)
list ==> [1, 2, 3]
jshell> list.add(4)
| 异常错误 java.lang.UnsupportedOperationException
| at ImmutableCollections.uoe (ImmutableCollections.java:72)
| at ImmutableCollections$AbstractImmutableCollection.add (ImmutableCollections.java:76)
| at (#16:1)
jshell>
jshell> Set set = Set.of(1, 3, 7, 5, 3)
| 异常错误 java.lang.IllegalArgumentException:duplicate element: 3
| at ImmutableCollections$SetN. (ImmutableCollections.java:604)
| at Set.of (Set.java:541)
| at (#21:1)
jshell> Set set = Set.of(1, 3, 7, 5)
set ==> [5, 7, 1, 3]
jshell>
4. String新增API
- 判断字符串是否为空白字符。其中空白字符包含\t、\n、\r、英文中文等其它语言空格
jshell> var str = "\t \n \r"
str ==> "\t \n \r"
jshell> str.isBlank()
$2 ==> true
jshell>
- 去除首尾空白字符。其中
str.stripLeading()
去除首部空白字符,str.stripTrailing()
去除尾部空白字符
jshell> var str = "\t abc\n \r"
str ==> "\t abc\n \r"
jshell> str.strip()
$5 ==> "abc"
jshell>
- 复制字符串
jshell> "java".repeat(3)
$8 ==> "javajavajava"
jshell>
4 行数统计
jshell> "A\nB\nC".lines().count()
$9 ==> 3
jshell>
5. InputStream.transferTo方法
用来将数据从InputStream直接传输到OutputStream
查看test.input文件内容如下
[root@bigdata005 opt]# cat test.input
hello world
hello java
[root@bigdata005 opt]#
使用transferTo方法,将test.input文件内容拷贝到test.output文件
jshell> InputStream is = new FileInputStream("/opt/test.input")
is ==> java.io.FileInputStream@7f13d6e
jshell> OutputStream os = new FileOutputStream("/opt/test.output")
os ==> java.io.FileOutputStream@59494225
jshell> is.transferTo(os)
$14 ==> 23
jshell> is.close()
jshell> os.close()
jshell>
查看test.output文件内容如下
[root@bigdata005 opt]# cat test.output
hello world
hello java
[root@bigdata005 opt]#
6. Java原生的HTTP客户端
支持同步请求和异步请求两种方式
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class Java11Test {
public static void main(String[] args) throws Exception {
var client = HttpClient.newHttpClient();
var request = HttpRequest
.newBuilder(URI.create("http://192.168.8.111:8081"))
.build();
HttpResponse.BodyHandler bodyHandler = HttpResponse.BodyHandlers.ofString();
// ======================================同步请求方式================================
HttpResponse response = client.send(request, bodyHandler);
System.out.println(response.body());
// ======================================异步请求方式================================
CompletableFuture sendAsync = client.sendAsync(request, bodyHandler);
// 异步处理姐结果
sendAsync.whenComplete((HttpResponse asyncResponse, Throwable throwable) -> {
System.out.println(asyncResponse.body());
});
// 阻塞等待所有任务执行完成
CompletableFuture.allOf(sendAsync).join();
}
}
7. java命令直接运行单个.java文件
说明:
- 不会产生.class文件
- 会执行.java文件中的第一个类, 且第一个类必须包含main方法
- 可以使用本.java文件中的自定义类,不可以使用其它.java文件中的自定义类
示例如下:
[root@bigdata001 ~]# cat Test.java
public class Test {
public static void main(String[] args) {
new Person();
System.out.println("hello world");
}
}
class Person {
private String name;
}
[root@bigdata001 ~]#
[root@bigdata001 ~]# java Test.java
hello world
[root@bigdata001 ~]#
8. ZGC垃圾收集器
ZGC(A Scalable Low-Latency Garbage Collector),特点如下:
- GC暂停时间不会超过10ms
- 能处理几百MB到几个TB的堆
- 和G1相比, 应用吞吐能力下降不会超过15%
- 并发进行垃圾收集,且只有root扫描阶段会stop the world, 因此GC停顿时间不会随着堆的增长而变长
开启ZGC垃圾收集器示例
[root@bigdata001 ~]# javac Test.java
[root@bigdata001 ~]#
[root@bigdata001 ~]# java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC Test
hello world
[root@bigdata001 ~]#