愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第3集 JDK11之标准HttpClient提交Post和异步请求
第4集 JDK11之标准HttpClient提交Http2请求
第1集 JDK10之局部变量类型推断var讲解
简介:讲解JDK10新增局部变量类型推断var
-
Java是一种强类型, 许多流行的编程语言都已经支持局部变量类型推断,如js,Python,C++等
-
JDK10 可以使用var作为局部变量类型推断标识符
-
Local-Variable Type Inference(局部变量类型推断),顾名思义只能用做为局部变量
-
注意
-
仅适用于局部变量,如 增强for循环的索引,传统for循环局部变量
-
不能使用于方法形参、构造函数形参、方法返回类型或任何其他类型的变量声明
-
标识符var不是关键字,而是一个保留类型名称,而且不支持类或接口叫var,也不符合命名规范
-
可以用jshell试验或者IDEA
-
-
//根据推断为 字符串类型
var strVar = "springboot";
System.out.println(strVar instanceof String);
//根据10L 推断long 类型
var longVar = 10L;
//根据 true推断 boolean 类型
var flag = true;
//var flag = Boolean.valueOf("true");
//System.out.println(flag instanceof Boolean);
// 推断 ArrayList<String>
var listVar = new ArrayList<String>();
System.out.println(listVar instanceof ArrayList);
// 推断 Stream<String>
var streamVar = Stream.of("aa", "bb", "cc");
System.out.println(streamVar instanceof Stream);
if(flag){
System.out.println("这个是 flag 变量,值为true");
}
for (var i = 0; i < 10; i++) {
System.out.println(i);
}
try (var input = new FileInputStream("validation.txt")) {
}
第2集 JDK11之新增HttpClient客户端快速入门
简介:讲解JDK11新增Http客户端
-
这个功能在JDK 9中引入并在JDK 10中得到了更新
-
最终JDK11正式发布,支持 HTT/1.1, HTTP/2,(JDK10相关课程里面未讲解该知识点)
-
常用类和接口讲解
-
HttpClient.Builder
-
HttpClient 构建工具类
-
-
HttpRequest.Builder
-
HttpRequest 构建工具类
-
-
HttpRequest.BodyPublisher
-
将java 对象转换为可发送的HTTP request body字节流, 如form表单提交
-
-
HttpResponse.BodyHandler
-
处理接收到的 Response Body
-
-
-
创建HttpClient, 下面结果是一致的底层调用
//var httpClient = HttpClient.newBuilder().build(); var httpClient = HttpClient.newHttpClient();
-
创建get请求
//private static final String targetUrl = "http://api.xdclass.net/pub/api/v1/web/all_category"; private static final URI uri = URI.create(targetUrl); //GET请求 private static void testGet() { //var httpClient = HttpClient.newHttpClient(); //设置建立连接超时 connect timeout var httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofMillis(5000)).build(); //设置读取数据超时 read timeout var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000)) .header("key1", "v1") .header("key2", "v2") .uri(uri).build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } }
第3集 JDK11之标准HttpClient提交Post和异步请求
简介:讲解JDK11新增Http客户端提交post请求和异步请求
-
使用HttpClient提交Post请求
private static final String targetUrl ="https://api.xdclass.net/pub/api/v1/web/web_login"; private static final URI uri = URI.create(targetUrl); //POST请求 private static void testPost() { var httpClient = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(uri) //json格式则使用下面数据 //.header("Content-Type", "application/json") //.POST(HttpRequest.BodyPublishers.ofString("{\"phone\":\"13113777337\",\"pwd\":\"1234567890\"}")) //form表单则使用下面配置 .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString("phone=13113777337&pwd=1234567890")) .build(); try { var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } catch (Exception e) { e.printStackTrace(); } }
-
使用HttpClient提交异步GET请求
//异步GET请求
//private static final String targetUrl = "http://api.xdclass.net/pub/api/v1/web/all_category";
private static final URI uri = URI.create(targetUrl);
//异步请求通过CompletableFuture实现。
private static void testAsynGet() {
var httpClient = HttpClient.newBuilder().build();
var request = HttpRequest.newBuilder().timeout(Duration.ofMillis(3000))
.header("key1", "v1")
.header("key2", "v2")
.uri(uri).build();
try {
//CompletableFuture<String> result = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body);
var result = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body);
System.out.println(result.get());
} catch (Exception e) {
e.printStackTrace();
}
}
第4集 JDK11之标准HttpClient提交Http2请求
简介:讲解JDK11新增Http客户端提交http2请求
-
HTTP2 百科
-
HTTP2协议的强制要求https,如果目标URI是HTTP的,则无法使用HTTP 2协议
-
如何判断网站是否是http2协议,浏览器,network面板,选择protocol
-
private static final String targetUrl = "https://http2.akamai.com/demo";
private static final URI uri = URI.create(targetUrl);
private static void testHttp2() {
var httpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofMillis(3000))
.version(HttpClient.Version.HTTP_2)
.build();
var request = HttpRequest.newBuilder()
.timeout(Duration.ofMillis(3000))
.header("key1", "v1")
.header("key2", "v2")
.uri(uri)
.build();
try {
var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
System.out.println(response.version());
} catch (Exception e) {
e.printStackTrace();
}
}
第5集 JDK11之javac和java命令优化
简介:讲解java编译运行命令在jdk11中的改善
-
jdk11前运行java程序
-
编译
-
javac xxx.java
-
-
运行
-
java xxx
-
-
-
jdk11后运行java程序(本地不会生成class文件)
-
java xxxx.java
-
public class Main {
public static void main(String[] args) throws Exception {
String text = "xdclass.net";
//String类新增repeat(int num) 方法,用于字符串循环输出
System.out.println(text.repeat(2));
}
}
干货文档
关注公众号发送:“CSDN干货文档” 即可领取