JDK不同版本间的新特性-基础篇

2023-11-20

目录

一、JDK环境部署

1.1 JDK18与IDEA2022环境准备

二、JDK9-10新特性

2.1 JDK9新特性——私有接口方法

2.2 JDK9新特性——通过try块自动关闭资源

 2.4 JDK10新特性——var动态类型推断

局部变量类型推断:

不可变集合:List.copyOf(提高数据安全性)

Java11 新的String方法:

三、JDK12-14新特性

3.2 JDK12新特性——增强的switch分支判断

3.3 JDK13新特性——文本块特性

四、总结

4.1 总结


一、JDK环境部署

1.1 JDK18与IDEA2022环境准备

        80%企业应用都在使用JDK8来做开发。

        1. JDK9: 私有接口方法

        2. JDK9: Try自动关闭IO流

        3. JDK10: var动态类型推断

        4. JDK10: 不可变集合

        5. JDK11: 新的String方法

        6. JDK12: 新版swith语法

        7. JDK13: 文本块特性

JDK18与IDEA2022环境准备:

        Java Downloads | Oracle

        下载 IntelliJ IDEA:JetBrains 功能强大、符合人体工程学的 Java IDE

二、JDK9-10新特性

2.1 JDK9新特性——私有接口方法

        2017年9月21日,JDK9正式发布。JDK9提供了超过150项新功能特性,包括备受期待的模块化系统、可交互REPL工具、jshell、JDK编译工具、公共API和接口私有代码、以及安全增强、扩展提升、性能管理改善等。可以说JDK9是一个庞大的系统工程,完全做了一个整体改变。

 私有接口方法:

        在JDK8之前,接口可以有常量变量和抽象方法,不能在接口中提供方法实现。

        JDK9不仅像JDK8一样支持接口默认方法,同时还支持私有方法新特性。

        通过接口私有方法,可以进一步增强接口的灵活性。

package com.imooc.jdk9;
//私有接口方法
public interface Sample01 {
    //在真正项目开发中,IP地址等信息要动态获得。
    //IP变化,要执行某个命令获取新的IP地址。
    //动态行为,变量无法实现,最好封装成方法。
    //String ip = "192.168.1.30"; 
    default void showInfo(){
        System.out.println("基本信息");
        System.out.println("IP地址:" + getIp());
    }

    default void showDetail(){
        System.out.println("详细信息");
        System.out.println("IP地址:"+ getIp());
    }

    //私有接口方法为 默认接口方法服务。
    private String getIp(){
        return "192.168.1.30";
    }
}

2.2 JDK9新特性——通过try块自动关闭资源

        Try自动关闭IO流。

  

        没有此新特性之前,释放资源的代码 比主体代码还多,明显不适宜。

package com.imooc.jdk9;

import java.io.*;
//通过try块自动关闭资源
public class Sample02 {
    public static void main(String[] args) throws FileNotFoundException {
        File source = new File("d:/demo.jpg");
        File target = new File("d:/demo1.jpg");
        //通过try块自动关闭资源
        try (InputStream fis = new FileInputStream(source);
             OutputStream fos = new FileOutputStream(target);){
            byte[] bs = new byte[1024];
            int len;
            //利用read方法循环读取的字节数据,并进行处理
            while((len = fis.read(bs)) != -1){
                System.out.println(len);
                //将读取到到字节数组写入到输出流
                fos.write(bs,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 2.4 JDK10新特性——var动态类型推断

        2018年3月21日,JDK10正式发布。JDK9与JDK10都不是长期支持版本(LTS),JDK11是长期支持版本。

        JDK10新增了109个新特性,与开发相关的关键特性有两个:局部变量类型推断、不可变集合。

局部变量类型推断:

        

package com.imooc.jdk10;

import java.util.ArrayList;

//var动态类型推断
public class Sample03 {
    public static void main(String[] args) {
        var str = new String("a");
        var str1 = "a";
        System.out.println(str instanceof String);
        System.out.println(str1 instanceof String);
        var list = new ArrayList<String>();
        list.add("abc");
        //list.add(321);
        //var l = 100l; //var在直接赋值数据类型时返回对应数据类型
        var l = Long.valueOf(100l); //要返回包装类型对象要用valueOf方法
        System.out.println(l instanceof Long);

        var b = Boolean.valueOf(true);
        System.out.println(b instanceof Boolean);
    }
}

不可变集合:List.copyOf(提高数据安全性)

package com.imooc.jdk10;

import java.util.ArrayList;
import java.util.List;

//不可变集合
public class Sample04 {
    public static void main(String[] args) {
        final var list = new ArrayList<String>();
        list.add("ABC");
        list.add("BCD");
        list.add("EFG");
        //List.copyOf创建不可变集合
        List<String> copyList = List.copyOf(list);
        copyList.add("A"); //会抛出不可操作异常

    }
}

Java11 新的String方法:

package com.imooc.jdk11;

//新的String方法
public class Sample05 {
    public static void main(String[] args) {
        String str = "    www.imooc.com ";
        boolean isblank = str.isBlank();  //判断字符串是空白,可以都是空格,长度不为0
        System.out.println(str + "是否空白:" + isblank);
        boolean isempty = str.isEmpty();  //判断字符串是否为空,长度=0
        System.out.println(str + "是否为空:" + isempty);
        String result1 = str.strip();    //去掉首尾空白(包括全角空格),trim()只能去掉半角空格
        System.out.println(str + "去除首尾空白:" + result1.length());
        String result2 = str.stripTrailing();  //去除尾部空白
        System.out.println(str + "去除尾部空白:" + result2.length());
        String result3 = str.stripLeading();  //去除首部空白
        System.out.println(str + "去除首部空白:" + result3.length());
        String copyStr = str.repeat(2);  //复制几遍字符串
        System.out.println(str + "复制两次:" + copyStr);
        long lineCount = copyStr.lines().count();  //行数统计
        System.out.println(str + "行数:" + lineCount);//

    }
}

三、JDK12-14新特性

3.2 JDK12新特性——增强的switch分支判断

        JDK12 is the open-source reference implementation of version 12 of the Java SE Platform as specified by JSR 386 in the Java Community Process.

        JDK12 reached General Availability on 19 March 2019. Production-ready binaries under the GPL are available from Oracle; binaries from other vendors will follow shortly.

        The features and schedule of this release were proposed and tracked via the JEP Process, as amended by the JEP 2.0 proposal. The release was produced using the JDK Release Process(JEP 3).

        2019年3月19日JDK12诞生了,短期支持版本,日常项目中不建议使用它。但是它推出了一个非常重要的,影响到Java整个体系的语法规则,增强的Switch分支语法。

package com.imooc.jdk12;

import java.util.Random;
//新版swith语法
public class Sample06 {
    public void oldSwitch(){
        int day = new Random().nextInt(7);
        int result = 0;
        switch (day) {
            case 0:
            case 1:
            case 2:
                result = 88;
                break;
            case 3:
                result = 99;
                break;
            case 4:
            case 5:
                result = 101;
                break;
            case 6:
                result = 120;
                break;
            default:
                result = -1;
        }
        System.out.println(result);
    }

    public void newSwitch(){
        int day = new Random().nextInt(7);
        int result = switch (day){
            case 0,1,2 -> 88;
            case 3 -> 99;
            case 4,5 -> 101;
            case 6 -> 120;
            default -> -1;
        };
        System.out.println(result);
    }
    public static void main(String[] args) {
        new Sample06().newSwitch();
    }
}

3.3 JDK13新特性——文本块特性

        JDK13 2019年9月17日发布的,短暂的版本,有了一个千呼万唤很多的年的特性,文本块特性。对我们日常开发有非常大的帮助。

四、总结

4.1 总结

        从JDK14开始,语法层面已经非常成熟。JDK14~18只是对现有语法进行完善,底层更多关注具体功能层面上、运行机制上的升级和更新。 

        14

        更有价值的NullPointer

        record记录类型

        15

        密封类

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK不同版本间的新特性-基础篇 的相关文章

  • Mockito 在调用参数数量可变的方法时使用参数匹配器

    我试图在对具有可变数量参数的方法的调用中使用参数匹配器 Java 中的东西 没有成功 我的代码如下 我还将列出我尝试用来完成此工作的所有行 import static org mockito Mockito public class Met
  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • createImage(int width, int height) 的问题

    我有以下代码 作为游戏的一部分每 10 毫秒运行一次 private void gameRender if dbImage null createImage returns null if GraphicsEnvironment isHea
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • R 语言 基础教程 第6章 分类与预测建模(1)朴素贝叶斯分类,KNN算法,人工神经网络,CART算法,C4.5算法,决策树,回归分析,R语言数据分析

    关注公众号凡花花的小窝 收获更多的考研计算机专业编程相关的资料 分类与测分析是数据挖掘的主要技术手段之一 都属于分析数据的形式 至今已在理论和方法上取得了丰硕的研究成果 1 回归分析 数据分析概念 数据分析是指用适当的分析方法对收集来的大量
  • 液晶电视的MEMC(运动画质补偿技术)的优势不足

    MEMC Motion Estimate and Motion Compensation 即运动估计和运动补偿 液晶电视中用到的运动画质补偿技术 其原理是采用动态映像系统 在传统的两帧图像之间加插一帧运动补偿帧 将普通平板电视的50 60H
  • JDBC连接MySQL数据库

    开发工具与关键技术 IntelliJ IDEA java 撰写时间 2020年9月8日 一 JDBC简介 JDBC全称为 Java Data Base Connectivity java数据库连接 用Java语言操作数据库 可以为多种数据库
  • FPG—VGA显示器字符显示(附代码)

    目录 1 实操 1 1 字符取模 1 2 顶层模块 1 3 图像数据生成模块 1 3 1 模块框图 1 3 2 波形图绘制 1 3 3 代码编写 1 3 4 仿真验证 2 总结 本例程大部分与VGA显示驱动内容相同 只是显示部分改变了 故此
  • sublime text 3神奇的插件--snippet

    像之前用VS 做项目时 任意创建一个asp网页 都会自动出现一些基础的代码 毕竟是微软把大家养的太舒服 总感觉用sublime text时每次手敲一些重复代码时特别无辜 所以查阅了一下package control 终于发现了这一神器 创建
  • 斑马面试总结

    面试岗位 测试开发实习生 面试主要提问的是简历上的项目经历 测试相关的 给你一个视频软件 怎么测试 功能测试 黑盒测试 视频的封面正常 点击屏幕或播放键可以正常播放 视频时间倒计时显示正常 再次点击暂停 视频的声音 默认打开 无噪音 可以调
  • java连接sqlserver2005 tcp 有时超时,SQL Server 2005 出现到主机 的 TCP/IP 连接失败

    用jdbc连接SQL Server2005出现到主机 的 TCP IP 连接失败 java net ConnectException Connection refused connect 估计是因为sqlserver2005默认情况下是禁用
  • Elasticsearch 日志

    下载并安装 Filebeat 首次使用 Filebeat 请参阅入门指南 复制代码片段 curl L O https artifacts elastic co downloads beats filebeat filebeat 7 2 0
  • SpringBoot 整合slf4j 日志配置

    slf4j 即 Simple Logging Facade for Java 简单门面日志 它是对所有日志框架制定的一种规范 标准 接口 并不是一个框架的具体的实现 它只服务于各种各样的日志系统 slf4j提供了统一的记录日志的接口 对不同
  • OpenGL.ES在Android上的简单实践:14-全景(惯性滑动球体)

    OpenGL ES在Android上的简单实践 14 全景 惯性滑动球体 1 整理封装全景球 现在 我们的地球已经能正确的显示出来 我们来增加必要的交互 使得我们左右滑动屏幕的时候 地球能旋转起来 而且是像一个地球仪一样 手指离开屏幕后 能
  • 如何修改游戏服务器ip地址吗,怎么修改游戏服务器ip地址吗

    怎么修改游戏服务器ip地址吗 内容精选 换一换 AI视频分析服务作业的输出结果需要指定输出通道 请提前配置好输出通道DIS或者Webhook AI视频分析服务作业的结果输出类型选择为DIS时 在创建作业前 您需确保DIS通道已开通成功 开通
  • 分-布-式-缓-存-(转)

    在前面的一些文章中 从实战的角度 讲解了有关 memcached的应用 容灾 监控等等 但是缺乏对理论的讲解和原理性的剖析 本文将从理论的角度去介绍 让大家从宏观上对 分布式缓存 nosql 等技术有所了解 以便进一步学习和使用 在构建大规
  • tensorflow 激活函数relu6为什么是6

    普通relu y max 0 x 相当于无限多个bernoulli分布 即无限多个骰子 relu6 y min max 0 x 6 相当于有六个bernoulli分布 即6个硬币 同时抛出正面 这样鼓励网络学习到稀疏特征 网络里面每一个输出
  • Linux之rm命令

    rm 删除一个文件或者目录 删除文件可以直接使用rm命令 若删除目录则必须配合选项 r rm r 删除当前目录下的所有文件及目录 文件一旦删除 则无法恢复 命令参数 f 强制删除 即使不存在的文件也不会报错 i交互式删除 r列出全部目录和子
  • 全国热门带正文新闻查询API接口

    一 接口介绍 解决同一类新闻在不同平台上的内容获取问题 在归档主流新闻平台的内容数据基础上 对外提供统一的调用方式来完成实时 最新的相关新闻的获取 极大方便各类企业在自有软件中集成新闻内容的功能 支持200余个新闻大站 为保证数据的及时性
  • PID控制算法(PID控制原理与程序流程)

    PID控制算法 PID控制原理与程序流程 暗影玄极 博客园 cnblogs com
  • RFID系统组成及其功能

    RFID系统因应用不同其组成会有所不同 但基本原理都是相似的 下面我们来讨论一下射频识别的基本原理 既然是射频识别 则必然要由读写器和电子标签组成 当然 在应用中通常还包含上层的管理系统 电子标签和读写器都要装有天线 以便于通信交流 其中读
  • Scratch资料

    Scratch软件是免费的 免费的 免费的 任何需要花钱才能下载Scratch软件的全是骗子 1 什么是Scratch Scratch是麻省理工学院的 终身幼儿园团队 开发的一种图形化编程工具 是面向青少年的一款模块化 积木化 可视化的编程
  • 【RF-SSA-LSTM】随机森林-麻雀优化算法优化时间序列预测研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 RF特征选择 2 2 LSTM预测 2 3 SSA LSTM预测 2 4 MLP预测
  • JDK不同版本间的新特性-基础篇

    目录 一 JDK环境部署 1 1 JDK18与IDEA2022环境准备 二 JDK9 10新特性 2 1 JDK9新特性 私有接口方法 2 2 JDK9新特性 通过try块自动关闭资源 2 4 JDK10新特性 var动态类型推断 局部变量