JDK11 新特性 String去空白字符加强版方法 首次支持ZGC
JDK11的新特性语法 api 方面不多, 如果算上 JDK9,JDK 10 两个短期版本变化也不少,JDK 11 和 JDK8 一样是长期支持版本,商用一般都不会选择9,10这种零时版本。
jdk11 最显著的提高在于首次支持ZGC,但是只是支持,并不建议商用使用。ZGC 能支持 PB级别内存,和垃圾回收10毫秒以内的 STW。
package com.lomi.jdk11;
import org.junit.Test;
import org.junit.validator.AnnotationValidator;
import org.junit.validator.ValidateWith;
import javax.xml.transform.stax.StAXSource;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Stream;
/**
* @author ZHANGYUKUN
* @date 2022/6/17
*/
public class JDK11NewTest {
/**
* 局部变量类型推断可以注解?
*/
@Test
public void test1(){
//这种一直都可以
@Deprecated
Long a = 1L;
//在jdk10 上是不能这样用的,用注解直接在var 标注的局部变量上加验证
Consumer supplier = ( @ValidateWith(AnnotationValidator.class) var s )->{
};
}
/**
* String 的几个新方法
* trim()可以去除字符串前后的半角空白字符 所以最好用这个,
* strip()可以去除字符串前后的全角和半角空白字符(我例子只用空格 回车换行之类的都是空白字符)
*/
@Test
public void test2(){
//aaa前面的空格第一个是半角,第二个是全角,全角也会认为是空白字符
System.out.println("strip:"+ " aaa ".strip() );
//aaa前面的空格第一个是半角,第二个是全角, 全角,不会被认为是空白字符
System.out.println("trim:"+ " aaa ".trim() );
//去前面的空格(可以去掉全角)
System.out.println("stripLeading:"+ " aaa ".stripLeading() );
//去后面的空格(可以去掉全角)
System.out.println("stripTrailing:"+ " aaa ".stripTrailing() );
//判断是否空白字符(全角也认为是空白字符)
System.out.println("isBlank:"+ " ".isBlank() );
//重复多少次
System.out.println("repeat:"+ "zyk".repeat(2) );
}
/**
* Optional 添加 isEmpty(),等于 !Optional.ofNullable(null).isPresent() ,估计是觉得 isPresent 没有 isEmpty 直观
*/
@Test
public void test3(){
System.out.println( Optional.ofNullable(null).isEmpty() );
System.out.println( !Optional.ofNullable(null).isPresent() );
System.out.println( Optional.ofNullable( new ArrayList() ).isEmpty() );
System.out.println( !Optional.ofNullable( new ArrayList() ).isPresent() );
}
/**
* 内置 HttpClient 代替 HttpURLConnecttion
*/
@Test
public void test4() throws URISyntaxException, IOException, InterruptedException {
//比 HttpURLConnecttion 简单和很多,但是 我重来没用过 HttpURLConnecttion,以前也是用的三方的HttpClient
HttpClient httpClient = HttpClient.newBuilder().build();
HttpRequest httpRequest = HttpRequest.newBuilder().GET().uri(new URI("https://www.baidu.com/")).build();
HttpResponse.BodyHandler stringBodyHandler = HttpResponse.BodyHandlers.ofString();
String stringBody = httpClient.send(httpRequest,stringBodyHandler).body();
System.out.println( stringBody );
// HttpURLConnecttion 需要放回结果 是一个输入流,需要手动的读这个流然后再包装成Strin
}
}