java 11 新特性完整使用
一、新增字符串处理的方法 (java11 特性)
1、处理方法归列 (java11 特性)
2、String新增的方法 (java11 特性)
1、isBlank():判断字符串是否为空白 (java11 特性)
@Test
public void test1(){
//isBlank():判断字符串是否为空白
System.out.println(" \t \t \n ".isBlank());
}
2、strip():去除首尾空白 (java11 特性)
@Test
public void test1(){
// strip():去除首尾空白
System.out.println("-----" + " \t abc \t \n ".strip() + "-------");
System.out.println("-----" + " \t abc \t \n ".trim() + "-------");
}
3、stripTrailing():去除尾部空格 (java11 特性)
@Test
public void test1(){
// stripTrailing():去除尾部空格
System.out.println("-----" + " \t abc \t \n ".stripTrailing() + "-------");
}
4、stripTrailing():去除尾部空格 (java11 特性)
@Test
public void test1(){
// stripLeading():去除首部空格
System.out.println("-----" + " \t abc \t \n ".stripLeading() + "-------");
}
5、repeat(int count):复制字符串 (java11 特性)
@Test
public void test1(){
// repeat(int count):复制字符串
String str1 = "abc";
String str2 = str1.repeat(5);
System.out.println(str2);
}
6、 lines().count():行数统计 (java11 特性)
@Test
public void test1(){
// lines().count():行数统计
String str3 = "abc\ndef\ng";
System.out.println(str3.lines().count());
}
二、Optional加强 (java11 特性)
Optional也增加了几个非常酷的方法,现在可以很方便的将-一个Optional 转换成一个Stream,或者当一个空Optional时给它-一个替代的。
1、java 8、9、10、11 特性对比 (java11 特性)
2、Optional.empty() 判断value是否为空 (java11 特性)
判断value是否为空
@Test
public void test2(){
var op = Optional.empty();
System.out.println(op.isPresent());//判断内部的value是否存在
System.out.println(op.isEmpty());//判断内部的value是否为空
}
3、orElseThrow():value非空,返回value (java11 特性)
orElseThrow():value非空,返回value;否则抛异常NoSuchElementException
@Test
public void test2(){
op = Optional.of("abc");
var obj = op.orElseThrow();
System.out.println(obj);
}
4、or:value非空,返回对应的Optional;value为空 (java11 特性)
or:value非空,返回对应的Optional;value为空,返回形参封装的Optional
//java11新特性二:Optional新增的方法
@Test
public void test2(){
op = Optional.of("abc");
Optional<String> op1 = Optional.of("hello");
// op = Optional.empty();
//or:value非空,返回对应的Optional;value为空,返回形参封装的Optional
Optional<Object> op2 = op.or(() -> op1);
System.out.println(op2);//
}
三、局部变量类型推断的升级 (java11 特性)
1、必须要有类型, 可以加上var、只是一个小加强
@Test
public void test3(){
//错误的形式: 必须要有类型, 可以加上var
// Consumer<String> con1 = (@Deprecated t) -> System.out.println(t.toUpperCase());
// 正确的形式:
// 使用var的好处是在使用lambda表达式时给参数加上注解。
Consumer<String> con2 = (@Deprecated var t) -> System.out.println(t.toUpperCase());
}
四、HttpClient替换原有的HttpURLConnection (java11 特性)
@Test
public void test4(){
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build();
HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();
HttpResponse<String> response = client.send(request, responseBodyHandler);
String body = response.body();
System.out.println(body);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test
public void test5(){
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build();
HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();
CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler);
sendAsync.thenApply(t -> t.body()).thenAccept(System.out::println);
//HttpResponse<String> response = sendAsync.get();
//String body = response.body();
//System.out.println(body);
}
五、更简化的编译运行程序 (java11 特性)
一个命令编译运行源代码的注意点:
➢执行源文件中的第一一个类,第-一个类必须包含主方法。
➢并且不可以使用其它源文件中的自定义类,本文件中的自定义类是可以使用的。
public class HelloJava {
public static void main(String[] args) {
System.out.println("Hello Java Simple");
Teacher t = new Teacher();
System.out.println(t);
//Student s = new Student("Tom");
//System.out.println(s);
}
}
class Teacher {
private String name;
private int age;
}
class Test2 {
public static void main(String[] args) {
System.out.println("Test2. main");
}
}
新建一个Hello.java、不需要javac、java 运行、java11直接java hello.java 一套完成
六、废弃Nashorn引擎 (java11 特性)
废除Nashorn javascript引 擎,在后续版本准备移除掉,有需要的可以考虑使用GraalVM。
七、ZGC (java11 特性)
1、介绍
1、GC是java主要优势之-一。 然而,当GC停顿太长,就会开始影响应用的响应时间。消除或者减少GC停顿时长,java将对更广泛的应用场景是-一个更有吸引力的平台。此外,现代系统中可用内存不断增长,用户和程序员希望JVM能够以高效的方式充分利用这些内存,并且无需长时间的GC暂停时间。
2、ZGC, A Scalable Low-Latency Garbage Collector(Experimental)ZGC,这应该是JDK11最为瞩目的特性,没有之一。 但是后面带了Experimental,说明这还不建议用到生产环境。
3、ZGC是一个并发,基于region,压缩型的垃圾收集器,只有root扫描阶段会STW(stop the world), 因此GC停顿时间不会随着堆的增长和存活对象的增长而变长。