Java11常用新特性的学习和使用

1. JShell

是Java的交互式客户端

[root@bigdata001 opt]# zulu11.56.19-ca-jdk11.0.15-linux_x64/bin/jshell 
5月 29, 2022 1:38:14 下午 java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  欢迎使用 JShell -- 版本 11.0.15
|  要大致了解该版本, 请键入: /help intro

jshell> System.out.println(
   ...> "hello world"
   ...> )
hello world

jshell> /help

2. var"关键字"

能进行局部变量类型推断。局部变量是在方法中申明的变量,不能用于类中的属性。如下所示

jshell> List<Integer> list = new ArrayList<>()
list ==> []

jshell> 

jshell> var str = "hello world"
str ==> "hello world"

jshell> 

jshell> Consumer<String> consumer = (@Deprecated var str) -> System.out.println(str.toUpperCase())
consumer ==> $Lambda$24/0x00000008000b5c40@5e3a8624

jshell> consumer.accept("hello world")
HELLO WORLD

jshell> 

3. Java集合新增API

jshell> List<Integer> list = List.of(1, 2, 3)
list ==> [1, 2, 3]

jshell> list.add(4)
|  异常错误 java.lang.UnsupportedOperationException
|        at ImmutableCollections.uoe (ImmutableCollections.java:72)
|        at ImmutableCollections$AbstractImmutableCollection.add (ImmutableCollections.java:76)
|        at (#16:1)

jshell> 

jshell> Set<Integer> set = Set.of(1, 3, 7, 5, 3)
|  异常错误 java.lang.IllegalArgumentException:duplicate element: 3
|        at ImmutableCollections$SetN.<init> (ImmutableCollections.java:604)
|        at Set.of (Set.java:541)
|        at (#21:1)

jshell> Set<Integer> set = Set.of(1, 3, 7, 5)
set ==> [5, 7, 1, 3]

jshell>

4. String新增API

  1. 判断字符串是否为空白字符。其中空白字符包含\t、\n、\r、英文中文等其它语言空格
jshell> var str = "\t \n \r"
str ==> "\t \n \r"

jshell> str.isBlank()
$2 ==> true

jshell> 
  1. 去除首尾空白字符。其中str.stripLeading()去除首部空白字符,str.stripTrailing()去除尾部空白字符
jshell> var str = "\t abc\n \r"
str ==> "\t abc\n \r"

jshell> str.strip()
$5 ==> "abc"

jshell>
  1. 复制字符串
jshell> "java".repeat(3)
$8 ==> "javajavajava"

jshell> 

4 行数统计

jshell> "A\nB\nC".lines().count()
$9 ==> 3

jshell>

5. InputStream.transferTo方法

用来将数据从InputStream直接传输到OutputStream

查看test.input文件内容如下

[root@bigdata005 opt]# cat test.input 
hello world
hello java
[root@bigdata005 opt]#

使用transferTo方法,将test.input文件内容拷贝到test.output文件

jshell> InputStream is = new FileInputStream("/opt/test.input")
is ==> java.io.FileInputStream@7f13d6e

jshell> OutputStream os = new FileOutputStream("/opt/test.output")
os ==> java.io.FileOutputStream@59494225

jshell> is.transferTo(os)
$14 ==> 23

jshell> is.close()

jshell> os.close()

jshell>

查看test.output文件内容如下

[root@bigdata005 opt]# cat test.output 
hello world
hello java
[root@bigdata005 opt]#

6. Java原生的HTTP客户端

支持同步请求和异步请求两种方式

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class Java11Test {
    public static void main(String[] args) throws Exception {

        var client = HttpClient.newHttpClient();
        var request = HttpRequest
                .newBuilder(URI.create("http://192.168.8.111:8081"))
                .build();
        HttpResponse.BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString();

        // ======================================同步请求方式================================
        HttpResponse<String> response = client.send(request, bodyHandler);
        System.out.println(response.body());

        // ======================================异步请求方式================================
        CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, bodyHandler);
        // 异步处理姐结果
        sendAsync.whenComplete((HttpResponse<String> asyncResponse, Throwable throwable) -> {
            System.out.println(asyncResponse.body());
        });
        // 阻塞等待所有任务执行完成
        CompletableFuture.allOf(sendAsync).join();
        
    }
}

7. java命令直接运行单个.java文件

说明:

  • 不会产生.class文件
  • 会执行.java文件中的第一个类, 且第一个类必须包含main方法
  • 可以使用本.java文件中的自定义类,不可以使用其它.java文件中的自定义类

示例如下:

[root@bigdata001 ~]# cat Test.java 
public class Test {
    public static void main(String[] args) {
        new Person();
        System.out.println("hello world");
    }
}

class Person {
    private String name;
}
[root@bigdata001 ~]# 
[root@bigdata001 ~]# java Test.java 
hello world
[root@bigdata001 ~]#

8. ZGC垃圾收集器

ZGC(A Scalable Low-Latency Garbage Collector),特点如下:

  • GC暂停时间不会超过10ms
  • 能处理几百MB到几个TB的堆
  • 和G1相比, 应用吞吐能力下降不会超过15%
  • 并发进行垃圾收集,且只有root扫描阶段会stop the world, 因此GC停顿时间不会随着堆的增长而变长

开启ZGC垃圾收集器示例

[root@bigdata001 ~]# javac Test.java 
[root@bigdata001 ~]# 
[root@bigdata001 ~]# java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC Test
hello world
[root@bigdata001 ~]#  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法与数据结构涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值