Java17-20新特性

news2024/11/26 17:38:15

目录

一、Java17新特性

1、switch语法的变化(预览)

2、Sealed Classes

3、伪随机数的变化

4、去除了AOT和JIT

二、Java18新特性

1、默认使用UTF-8字符编码

2、简单的web服务器

3、将被移除的方法

4、@snippet注解

三、Java19新特性

1、Virtual Threads(Preview)虚拟线程

四、Java20新特性


一、Java17新特性

        Java17是一个LTS(long term support)长期支持的版本,根据计划来看会支持到2029年(java8会支持到2030年),同时Oracle提议下一个LTS版本是java21,在2023年9月发布,这样将LTS版本的发布周期由之前的3年变为了2年。

Java17其他特性

Oracle is collaborating with the Java developer community and the JCP on enhancing LTS 
scheduling to give organizations more flexibility on when, or if, they want to migrate to
 a newer Java LTS version. Oracle is proposing that the next LTS release should be Java 21
 and made available in September 2023, which will change the ongoing LTS release cadence 
from three years to two years.

Oracle正在与Java开发人员社区和JCP合作,增强LTS调度,以使组织在何时或是否希望迁移到较新的Java LTS
版本方面具有更大的灵活性。Oracle建议下一个LTS版本应该是Java 21,并于2023年9月发布,这将把正在进行
的LTS发布周期从三年改为两年。

Java版本支持时间

oracle官网

1、switch语法的变化(预览)

        在之前版本中新增的instanceof模式匹配的特性在switch中也支持了,即我们可以在switch中减少强转的操作。

Rabbit和Bird均实现了Animal接口

package com.lwz.java.v17;

public interface Animal {
}

class Rabbit implements Animal {
    public void run() {
        System.out.println("run");
    }
}

class Bird implements Animal {
    public void fly() {
        System.out.println("fly");
    }
}

测试

package com.lwz.java.v17;

public class Switch01 {
    public static void main(String[] args) {
        Animal a=new Rabbit();
        animalEat(a);//run
    }

    public static void animalEat(Animal a){
        switch (a){
            case Rabbit r -> r.run();//判断a是否是Rabbit类型,若是则强转之后赋值给r
            case Bird b ->b.fly();
            case null -> System.out.println("null");
            default -> System.out.println("no animal");
        }
    }
}

2、Sealed Classes

        jdk15中已经添加了Sealed Classes,只不过当时是作为预览版,经历了2个版本之后,在jdk17中Sealed Classes已经成为正式版了,Sealed Classes的作用是可以限制一个类或者接口可以由哪些子类继承或者实现。

3、伪随机数的变化

增加了伪随机数相关的类和接口来让开发者使用stream流进行操作

RandomGenerator
RandomGeneratorFactory

之前的java.util.Random和java.util.concurrent.ThreadLocalRandom都是RandomGenerator接口的实现类。

4、去除了AOT和JIT

AOT(Ahead-of-Time)是java9中新增的功能,可以先将应用中的字节码编译成机器码。

Graal编译器作为使用java开发的JIT(just-in-time)即时编译期在java10中加入

二、Java18新特性

java新特性

1、默认使用UTF-8字符编码

从jdk18开始,默认使用UTF-8字符编码。我们可以通过如下参数修改为其他字符编码:

-Dfile.encoding=UTF-8

2、简单的web服务器

可以通过jwebserver命令启动jdk18中提供的静态web服务器,可以利用该工具查看一些原型,做简单的测试。在命令提示符中输入jwebserver命令后会启动,然后在浏览器中输入:http://127.0.0.1:8000/即可看到当前命令提示符路径下的文件了。

D:\.m2>jwebserver
默认情况下绑定到环回。如果要表示所有接口,请使用 "-b 0.0.0.0" 或 "-b ::"。
为 127.0.0.1 端口 8000 上的 D:\.m2 及子目录提供服务
URL http://127.0.0.1:8000/

若cmd执行jwebserver出现中文乱码解决方法:
设定cmd的编码为utf-8
打开cmd,输入以下命令

chcp 65001

这样既可以更改cmd的编码为UTF-8了。
以下是常用的cmd编码

字符编码对应字符
GBK(默认)936
美国英语437
utf-865001
-- 运行jar解决中文乱码
java -Dfile.encoding=utf-8 -jar project.jar

3、将被移除的方法

在jdk18中标记了Object中的finalize方法,Thread中的stop方法将在未来被移除

    @Deprecated(since="1.2", forRemoval=true)
    public final void stop() {
        throw new UnsupportedOperationException();
    }

4、@snippet注解

以前在文档注解中编写代码时需要添加code标签,使用较为不便,通过@snippet注解可以更方便的将文档注释中的代码展示在api文档中

package com.lwz.java.v17;

/**
 * 代码注释
 * {@snippet :
 * System.out.println();
 * }
 */
public class SnippetTest {
    public static void main(String[] args) {
        System.out.println();
    }
}

使用javadoc生成注释文件

D:\...java\com\lwz\java\v17>javadoc -d myfile SnippetTest.java
正在加载源文件SnippetTest.java...
正在构造 Javadoc 信息...
正在创建目标目录: "myfile\"
正在构建所有程序包和类的索引...
标准 Doclet 版本 21.0.1+12-LTS-29
正在构建所有程序包和类的树...
正在生成myfile\com\lwz\java\v17\SnippetTest.html...
SnippetTest.java:9: 警告: 使用不提供注释的默认构造器
public class SnippetTest {
       ^
SnippetTest.java:10: 警告: 没有注释
    public static void main(String[] args) {
                       ^
正在生成myfile\com\lwz\java\v17\package-summary.html...
正在生成myfile\com\lwz\java\v17\package-tree.html...
正在生成myfile\overview-tree.html...
正在构建所有类的索引...
正在生成myfile\allclasses-index.html...
正在生成myfile\allpackages-index.html...
正在生成myfile\index-all.html...
正在生成myfile\search.html...
正在生成myfile\index.html...
正在生成myfile\help-doc.html...
2 个警告

会生成myfile文件夹,双击index.html文件,效果如下

三、Java19新特性

1、Virtual Threads(Preview)虚拟线程

        该特性在java19中是预览版,虚拟线程是一种用户态下的线程,类似go语言中的goroutines和Erlang中的processes,虚拟线程并非比线程快,而是提高了应用的吞吐量,相比于传统的线程是由操作系统调度来看,虚拟线程是我们自己程序调度的线程。如果你对之前java提供的线程API比较熟悉了,那么在学习虚拟线程的时候比较轻松,传统线程能运行的代码,虚拟线程也可以运行。虚拟线程的出现,并没有修改java原有的并发模型,也不会替代原有的线程。虚拟线程主要作用是提升服务器端的吞吐量。

吞吐量的瓶颈

服务器应用程序的伸缩性受利特尔法则(Little's Law)的制约,与下面3点有关

1、延迟:请求处理的耗时

2、并发慢:同一时刻处理的请求数量

3、吞吐量:单位时间内处理的数据数量

比如一个服务器应用程序的延迟是50ms,处理10个并发请求,则吞吐量是200请求/秒(10/0.05),如果吞吐量要达到2000请求/秒,则处理的并发请求数量是100.按照1个请求一个线程的比例来看,要想提高吞吐量,线程数量也要增加。

java中的线程是在操作系统线程(OS thread)进行了一层包装,而操作系统中线程是重量级资源,在硬件配置确定的情况下,我们就不能创建更多的线程了,此时线程数量就限制了系统性能,为了解决该问题,虚拟线程就出现了。

四、Java20新特性

Java14-16新特性

一个程序员最重要的能力是:写出高质量的代码!!
有道无术,术尚可求也,有术无道,止于术。
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue图书馆书目推荐数据分析与可视化-计算机毕业设计python-django-php

建立本图书馆书目推荐数据分析是为了通过系统对图书数据根据算法进行的分析好推荐,以方便用户对自己所需图书信息的查询,根据不同的算法机制推荐给不同用户不同的图书,用户便可以从系统中获得图书信息信息。 对用户相关数据进行分析&#xff…

Flutter 05 组件状态、生命周期、数据传递(共享)、Key

一、Android界面渲染流程UI树与FlutterUI树的设计思路对比 二、Widget组件生命周期详解 1、Widget组件生命周期 和其他的视图框架比如android的Activity一样,flutter中的视图Widget也存在生命周期,生命周期的回调函数体现在了State上面。组件State的生命…

python自动化测试(九):EcShop添加商品功能

前置条件: 本地部署:ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) (32 位) py的selenium版本是3.11.0 目录 一、前置代码 二、添加商品操作 2.1 点击添加商品 2.2 添加名称、分类、品牌 2…

Java基础知识梳理(万字解析)

目录 数据类型 变量和常量 变量的命名规范 局部变量 类变量 实例变量 常量 运算符 java程序流程控制 Scanner类简单用法 方法 数组 面向对象Object-Oriented Programming(OOP) 类 对象 封装 继承 extends 多态 抽象 abstract 接口 i…

CSS3弹性布局

2009年,W3C提出一种崭新的布局方案—弹性盒(Flexbox)布局,使用该模型可以轻松地创建自适应窗口的流动布局,或者自适应字体大小的弹性布局。W3C的弹性盒布局分为旧版本、新版本及混合过渡版本3种不同的设计方案,其中混合过渡版本主…

「专题速递」数据驱动赋能、赛事直播优化、RTC技术、低延时传输引擎、多媒体处理框架、GPU加速...

点击文末阅读原文, 免费报名【抖音背后的体验增长实战揭秘】专场 随着全行业视频化的演进,营销、知识、商业和空间的交互体验正在被重塑。这种变化不仅仅是一种抽象的趋势,更是关系到用户留存和业务增长的关键因素。面对这样的挑战&#xff0…

技术报告模板:2023年全国大学生电子设计竞赛:运动目标控制与自动追踪系统(E题)

2023年全国大学生电子设计竞赛 运动目标控制与自动追踪系统(E题) 2023年8月4日 摘要:针对本题目的各项要求,本研究采用软硬件结合的方法设计了一套运动目标控制与自动追踪系统。该系统由OpenMV嵌入式计算机视觉平台、STM32单片机控…

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统,远程办公协作。 概述 PearProject 不支持 IE8 及以下版本,建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构,因此安装分为后端和前端两大部分,需要分别进…

定时器PWM输出

目录 介绍 PWM占空比 框图 输出比较 通道 1 输出比较功能为例 PWM 输出模式 PWM 边沿对齐模式 hal库代码 标准库代码 介绍 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微 处理器的数字输出来对模…

Android启动优化-全文详细

一个应用App的启动速度能够影响用户的首次体验,通常用户期望app响应和加载速度越快越好。一个启动速度慢的app很可能会给用户留下不好的印象,除了导致用户在应用市场上的打分低之外,很有可能导致致用户直接卸载。这种糟糕的体验可能会导致用户…

[译]CSS Animations 与 CSS Transitions

本文译者为 360 奇舞团前端开发工程师原文标题:CSS Animations Versus CSS Transitions原文作者:Kirupa Chinnathambi原文出处:《Creating Web Animations: Bringing Your UIs to Life》 在 CSS 中有两种设置动画的方式即 CSS animations 和 …

Modelsim 使用教程(3)——Projects

目录 一、概述 二、设计文件及tb 2.1 设计文件 counter.v 2.2 仿真文件 tcounter.v 三、操作流程 3.1 Create a New Project(创建一个新的工程) 3.2 Add Objects to the Project(把代码加入项目) 3.3 Compile the …

vue+vant图片压缩后上传

vuevant图片压缩后上传 vue文件写入 <template><div class"home"><van-field input-align"left"><template #input><van-uploaderv-model"fileList.file":after-read"afterRead":max-count"5":…

电子沙盘数字沙盘地理信息开发教程第17课

M3DGIS电子沙盘数字沙盘地理信息开发教程第17课新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格。 public bool Atmosphere;//是否显示大气圈。&#xff08;因为WPF不支持shader功能&#xff0c;所以效果嘛。。。&#xff09; 在SDK中提供底层的模型访问接…

美观且可以很方便自定义的MATLAB绘图颜色

函数介绍 主函数是draw_test&#xff0c;用于测试函数。 draw_h是函数&#xff0c;用于给Matlab提供美观且可以很方便自定义的绘图颜色。 draw_h函数介绍 这是一个带输入输出的函数&#xff0c;输入1/2/3&#xff0c;输出下面三种颜色库的配色&#xff0c;每种库均有五种颜色…

开发板挂载 Ubuntu 的 NFS 目录

前言 使用的开发板为韦东山老师的 IMX6ULL 目录 什么是 NFS 协议&#xff1f; 为什么要挂载 Ubuntu 的 nfs 目录&#xff1f; 开发板挂载 Ubuntu 的 NFS 目录 步骤 1. 确定 ubuntu 的桥接网卡 IP 2. 判断是否开权限了 3. 判断是否安装并启动 NFS 服务 4. 在开发板上执…

C语言从入门到精通之【第一个程序hello world】

编程步骤 通常&#xff0c;我们按照以下步骤进行 确立目标设计程序编写代码编译程序运行程序测试&调试修改维护 输出hello world 每个学编程的人都会从最经典的【输出hello world】开始。 https://lightly.teamcode.com/ 我们可以使用这个在线IDE学习C语言。 代码很简…

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同&#xff0c;gradle的版本和gradle plugins的版本都会影响使用方式。 基于此&#xff0c;本文只能作为参考&#xff0c;而不能作为唯一答案&#xff0c;如果要完全依赖本文&#xff0c;则…

Python接口自动化测试 —— Requests库学习

安装&#xff1a; pip install requests 例子&#xff1a; import requests r requests.get(http://www.baidu.com) print r.status_code print type(r) print r.cookies运行程序&#xff0c;得到结果&#xff1a; 运行程序&#xff0c;得到结果&#xff1a; 200 <cla…