服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 测试开发同学必须了解的Java11中的重要变化

测试开发同学必须了解的Java11中的重要变化

2021-12-31 22:55测试开发Kevin Java教程

目前市场上主流的稳定版是Java 8和Java 11(java17也推出了稳定版,但使用者寥寥),我个人建议测试开发人员可以选择使用jdk11,在这里总结一下使用jdk11的一些重要变化!

测试开发同学必须了解的Java11中的重要变化

目前市场上主流的稳定版是Java 8和Java 11(java17也推出了稳定版,但使用者寥寥),目前大部分公司的生产环境还是Java 8居多。因为正在建设中的系统,擅自更换语言SDK版本更是大忌。因为更换语言SDK就意味着SDK API面临着变更风险,极有可能导致很多未知的运行时错误和编译器错误。一个大型的软件系统,其实不仅仅光包含了语言SDK,还可能包含了诸多框架和中间件,例如Spring Cloud全家桶、Kafka、Spark等等,升级SDK意味着你要面对大量SDK升级带来的可能对中间组件的非向下兼容特性,一旦遇到,那对整个软件系统那就是灭顶之灾。而对于测试开发工程师而言,升级到jdk11的风险要小很多,因为我们的代码量以及依赖的框架和中间件相对还是较开发人员小很多的!我个人建议测试开发人员可以选择使用jdk11,在这里总结一下使用jdk11的一些重要变化!

总体感受:jdk11的语法越来越像python啦!

变量类型推断

引入关键字var,用var来定义的变量不用写具体类型,编译器能根据=右边的实际赋值来自动推断出变量的类型:

  1. var str="hello jdk 11";
  2. System.out.println(str);

输出

  1. hello jdk 11

是不是有了错觉,我是谁?我在哪?我在使用python吗?

Files类文件读写增强

可以通过Files类的静态方法writeString()和readString()完成文件读写操作,核心示例代码如下:

  1. Path path = Paths.get("D: /test.txt");
  2. String content = null;
  3. try {
  4. content = Files.readString(path, StandardCharsets.UTF_8);
  5. } catch (IOException e) {
  6. e.printStackTrace();
  7. }
  8. System.out.println(content);
  9. try {
  10. Files.writeString( path, "老李", StandardCharsets.UTF_8 );
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }

官方提供HTTPClient

现在JDK官方就自带HTTP Client了,位于java.net.http包下,很显然就是对标apache的httpclient,我们直接使用jdk11中自带的httpclient就可以做接口测试相关的工作了!核心示例代码如下:

  1. var request = HttpRequest.newBuilder()
  2. .uri( URI.create("https://www.baidu.com") )
  3. .GET()
  4. .build();
  5. HttpResponse httpResponse = null;
  6. try {
  7. httpResponse = HttpClient.newHttpClient()
  8. .send( request, HttpResponse.BodyHandlers.ofString());
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. System.out.println( httpResponse.body() ); // 打印获取到的网页内容

支持java源文件直接运行

通过在cmd中,执行命令java **.java,直接运行**.java文件

是不是又有了错觉,我是谁?我在哪?我在使用python吗?

Jshell交互式工具的使用

从java9开始,java开始引入了类似于python的交互式工具

在jdk bin目录下提供了工具Jshell,使用方法如下图

测试开发同学必须了解的Java11中的重要变化

是不是再次有了错觉,我是谁?我在哪?我在使用python吗?

接下来这两个功能对于性能测试工程师来说,绝对有必要了解一下:

垃圾回收机制性能的提升

ZGC, 这应该是JDK11最为瞩目的特性, 没有之一。但是后面带了Experimental, 说明这还不建议用到生产环境。ZGC的设计目标是:支持TB级内存容量,暂停时间低(<10ms),对整个程序吞吐量的影响小于15%。

完全支持Linux容器(包括Docker)

许多运行在Java虚拟机中的应用程序都可以在Docker容器中运行。但是在Docker容器中运行Java应用程序一直存在一个问题,那就是在容器中运行JVM程序在设置内存大小和CPU使用率后,会导致应用程序的性能下降。这是因为Java应用程序没有意识到它正在容器中运行。随着Java 10的发布,这个问题总算得以解决,JVM现在可以识别由容器控制组(cgroups)设置的约束。可以在容器中使用内存和CPU约束来直接管理Java应用程序,其中包括:

  • 遵守容器中设置的内存限制
  • 在容器中设置可用的CPU
  • 在容器中设置CPU约束

升级到jdk11的问题-软件不兼容

最大的问题就是jdk11跟其他软件的不兼容,例如jmeter4.0在jdk11环境中就会运行失败。因此建议在电脑上同时安装jdk1.8和jdk11!

原文链接:https://www.toutiao.com/a7046956531899728421/

延伸 · 阅读

精彩推荐
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17