小滴课堂-学习笔记:(12) Java高级核心之玩转JDK10和JDK11常见特性

56 篇文章 0 订阅
33 篇文章 0 订阅

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

 

目录

第1集 JDK10之局部变量类型推断var讲解

第2集 JDK11之新增HttpClient客户端快速入门

第3集 JDK11之标准HttpClient提交Post和异步请求

第4集 JDK11之标准HttpClient提交Http2请求

第5集 JDK11之javac和java命令优化

干货文档


第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相关课程里面未讲解该知识点)

  • 官方文档 http://openjdk.java.net/jeps/321

  • 常用类和接口讲解

    • 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请求

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干货文档”  即可领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值