阶段十-java新特性

news2024/11/24 1:39:39

JDK9新特性

1.模块化系统

      jar包结构的变化

        jar -》model -》package -》class

      通过不同的模块进行开发

      每个模块都有自己的模块配置文件module-info.java

2.JShell

        JDK9自带的命令行开发,在进行简单的代码调试时可以直接编译使用

        可以定义变量,方法,和java中的一样

        /list 所有的代码片段 /vars 所有的变量  /methods 所有的方法

 

3.接口私有方法

       

4.钻石操作符使用升级

在jdk8中,如下代码是报错的

Comparator<Object> com = new Comparator<>() {
    @Override
    public int compare(Object o1, Object o2) {
        return 0;
    }
};

<>必须写类型。

而在jdk9中,上述代码就不报错,这是对<>钻石运算符的一个升级。

5.try语句升级

6.String存储结构变更

String底层的char[]字符数组发生改变,变成了byte[]字节数组

StringBuffer和StringBuilder也变成了byte[]字节数组

ISO-8859-1/Latin-1(每个字节一个字节)的字符字符)或UTF-16(每个字符两个字节),具体取决于内容字符串的。编码标志将指示使用哪种编码。

7.集合特性of

public class Demo {
    public static void main(String[] args) {
        //对于不可变集合的增强
        //JDK8创建一个不可变集合
        ArrayList<String> list = new ArrayList<>();
        list.add("张三");
        list.add("张三");
        list.add("张三");
        //集合工具类
        Collection<String> results = Collections.unmodifiableCollection(list);
        System.out.println(results);
        //报错
        /*results.add("李四");
        System.out.println(results);*/

        //JDK9中创建自读集合
        List<String> list2 = List.of("张三", "张三", "张三");
        //报错
        /*list2.set(0,"李四");*/
        System.out.println(list2);
        Set<String> set1 = Set.of("AA", "BB", "CC");
        System.out.println(set1);
        Map<String, String> map = Map.of("k1", "v1", "k2", "v2");
        System.out.println(map);

    }
}

8.InputStream增强

public class Demo {
    public static void main(String[] args) throws Exception{
        //直接通过一个方法将输入流传递到输出流
        FileInputStream fileInputStream = new FileInputStream("D:\\a.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("D:\\b.txt");

        try(fileOutputStream;fileInputStream) {
            fileInputStream.transferTo(fileOutputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

9.增强的Stream API

public class Demo {
    public static void main(String[] args) {
        //从开头开始,到第一个不满足条件的结束
        List<Integer> list = Arrays.asList(10,20,30,40,30,20,10);
        list.stream().takeWhile(t->t<40).forEach(System.out::println);

        //和takeWhile相反,从头开始第一个不满足开始后面的
        List<Integer> list2 = Arrays.asList(5,20,30,50,60,20,10);
        list2.stream().dropWhile(t->t<40).forEach(System.out::println);

        //允许通过
        Stream<String> streams = Stream.of("AA","BB",null);
        System.out.println(streams.count());
        //不允许通过
        Stream<Object> stream1 = Stream.of(null);
        System.out.println(stream1.count());
        //允许通过,ofNullable中可以为一个null
        Stream<Object> stream2 = Stream.ofNullable(null);
        System.out.println(stream2.count());

        //iterate
        //可以提供条件结束迭代
        //原本的方式
        Stream.iterate(1,integer -> integer + 1).limit(50).forEach(System.out::println);
        //增强的方式
        //条件写在括号里面
        Stream.iterate(1,i -> i<60,i -> i + 1).forEach(System.out::println);
    }
}

10.Optional 类中stream()使用

public class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        Optional<List<String>> optional = Optional.ofNullable(list);
        optional.stream().forEach(System.out::println);
        //flatMap可以便利Optional中的每一个元素
        optional.stream().flatMap(x->x.stream()).forEach(System.out::println);
    }
}

JDK10新特性

1.局部变量类型推断

java是强语言类型,前面是什么类型,后面就是什么类型,这个var能推断出后面是什么类型

js是弱语言类型,什么类型都行

public class Demo {
    public static void main(String[] args) {
        //局部类型推断
        var i = 1;
        var list = new ArrayList<String>();
        //不能推断的情况
        //初始值为null
        var a = null;
        //方法引用
        var r = System.out::println;
        //Lambda表达式
        var c = (Integer b) -> {
            return b+"";
        };
        var d = {2,3,4};
    }
}

var 不是一个关键字:你不需要担心变量名或方法名会与 var发生冲突

2.新增不可变集合方法(只读)

public class Demo1 {
    public static void main(String[] args) {
        //只读集合增强
        //将不是只读集合的集合变成只读集合
        //copyOf
        //示例1
        var list1 = List.of("AA","BB","CC");
        var list2 = List.copyOf(list1);
        System.out.println(list1==list2);//true

        //示例2
        var list3 = new ArrayList<String>();
        list3.add("AA");
        list3.add("BB");
        List<String> list4 = List.copyOf(list3);
        System.out.println(list3==list4); //false
    }
}

JDK11新特性

1.垃圾回收器ZGC

2.Optional加强

isEmpty()判断是否为空

3.新增HTTP客户端API

public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request =
        HttpRequest.newBuilder(URI.create("http://www.baidu.com")).build();
    HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();
    HttpResponse<String> response = client.send(request, responseBodyHandler);
    String body = response.body();
    System.out.println(body);
}

JDK 14 新特性

空指针异常更加具体

JDK 16 新特性

switch增强

public class Demo {
    public static void main(String[] args) {
        int level = new Random().nextInt(12);
        String jiJi = null;
        switch (level){
            case 3,4,5 -> jiJi =  "春天";
            case 6,7,8 -> jiJi =  "夏天";
            case 9,10,11 -> jiJi =  "秋天";
            case 12,1,2 -> jiJi = "冬天";
        };
        System.out.println(jiJi);
    }
}

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

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

相关文章

【改进YOLOv8】矿物尺寸图像分析系统:融合位置感知循环卷积(ParC)改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;物体检测是计算机视觉领域中的一个重要研究方向。物体检测的目标…

工作随记:oracle 19c客户端通过service访问PDB异常问题

文章目录 概要技术测试分析测试1&#xff1a;测试2&#xff1a;测试3&#xff1a;测试4&#xff1a; 解决方案&#xff1a;1、修改service2、修改pdb名称 总结 概要 应用端访问提示错误信息为&#xff1a;VersionHelper异常!未将对象引用设置到对象的实例&#xff01; 此问题…

jdk21升级,asm报错Unsupported class file major version 65

环境 jdk21升级&#xff0c;asm报错&#xff0c;spring-core版本5.3.18&#xff0c;项目springboot版本为2.6.6 报错明细 Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file ve…

交易历史记录20231205 记录

昨日回顾&#xff1a; select top 10000 * from dbo.CODEINFO A left join dbo.全部&#xff21;股20231205010101 B ON A.CODE B.代码 left join dbo.全部&#xff21;股20231205CONF D on A.CODED.代码left join dbo.全部&#xff21;股20231205 G on A.CODEG.代码 left…

Ubuntu-rsyslog和systemd-journald日志服务

rsyslog日志服务 rsyslog作为传统的系统日志服务&#xff0c;把所有收集到的日志都记录到/var/log/目录下的各个日志文件中。 常见的日志文件如下&#xff1a; /var/log/messages 绝大多数的系统日志都记录到该文件 /var/log/secure 所有跟安全和认证授权等日志…

Tcl语言语法精炼总结

一、置换符号 1.变量置换 $ TCl解释器会将认为$后面为变量名&#xff0c;将变量名置换成它的值 2.命令置换 [] []内是一个独立的TCL语句 3.反斜杠置换 \ 换行符、空格、[、$等被TCL解释器当作特殊符号处理。加上反斜杠后变成普通字符 \t TAB \n 换行符 4.双引号 “” “…

Tcon基础知识

1、TCON&#xff0c;就是 Timing Controller 的缩写。从主芯片输出的要在 TFT 显示屏上显示的数据&#xff0c;在经过 TCON 模块后可以变换生成 Panel 可以直接利用的 DATA 信号和驱动器&#xff08;包括 source driver 和 gate driver&#xff09;的控制信号。 TV 市场上 TCO…

Java--1v1双向通信-控制台版

文章目录 前言客户端服务器端输出线程端End 前言 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的网络传输协议&#xff0c;它提供了端到端的数据传输和可靠性保证。 本程序就是基于tcp协议编写而成的。 利用 TCP 协议进行通信的两个应用…

[Unity+文心知识库]使用百度智能云搭建私有知识库,集成知识库API,打造具备知识库的AI二次元姐姐

1.简述 最近从百度智能云的官方技术支持那边了解到&#xff0c;目前百度千帆大模型平台提供有在线的知识库功能&#xff0c;能够在线上传自己的私人知识库文档&#xff0c;并且配置文心一言模型作为文本生成的引擎&#xff0c;构建自己的私有知识库。之前自己搭建知识库都是用的…

微服务--07--Sentienl中使用的限流算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Sentienl中使用的限流算法1、计数器固定窗口算法2、计数器滑动窗口算法----&#xff08;默认&#xff09;3、漏桶算法----&#xff08;排队等待&#xff09;4、令牌…

设计模式详解---观察者模式

1. 观察者模式简介 1.1. 什么是观察者模式 观察者模式是一种行为型设计模式&#xff0c;用于建立对象之间的一对多依赖关系。在该模式中&#xff0c;一个被称为主题&#xff08;Subject&#xff09;的对象维护一组观察者&#xff08;Observer&#xff09;&#xff0c;并在其状…

Kafka-快速实战

Kafka介绍 ChatGPT对于Apache Kafka的介绍&#xff1a; Apache Kafka是一个分布式流处理平台&#xff0c;最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统&#xff0c;可以快速地处理高吞吐…

前端-杂记

1 子域请求时候会默认带上父域下的Coolkie 2 document.cookie 设置cookie只能设置当前域和父域&#xff0c;且path只能是当前页或者/ 比如当前页面地址为 http://localhost:3000/about 我们设置 document.cookie "demo11"; 设置 document.cookie "demo22; …

7.25 SpringBoot项目实战【我的借阅记录】

文章目录 前言一、编写控制器二、编写服务层三、Git提交前言 至此,我们已经实现 图书借阅、收藏、评论等场景,最后来到【还书】场景,首先 还书的 入口 一般 是【我的借阅记录】,在这里可以根据产品设计,对于需要归还的书 操作【还书】,所以本文来实现【我的借阅记录】。…

基于ssm医院住院综合服务管理系统设计与开发论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

网站高性能架构设计——高性能数据库集群

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、高性能数据库简介 1.高性能数据库方式 读写分离&#xff1a;将访问压力分散到集群中的多个节点&#xff0c;没有分散存储压力 分库分表&…

【unity】如何用Unity获取Windows桌面

【背景】 默认的Unity可实现的屏幕共享仅仅针对Unity编辑器的编辑窗口中的Camera展现的内容。本篇研究如何实现用Unity实时反映Windows桌面窗口画面。 【准备插件】 下载地址&#xff1a; https://download.csdn.net/download/weixin_41697242/88623496 将解压后的文件夹直…

排序算法之一:直接插入排序

1.基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 实际中我们玩扑克牌时&#xff0c;就用…

【AI】java,在集合中找最接近给定值的数,且比给定值小

目录 一、最终得到的方案 二、AI辅助找到方案 2.1 【C知道】提供java代码支持 2.2 【文心一言】提供字段翻译支持 一、最终得到的方案 /*** 在 collection 中&#xff0c;找跟 value 最大接近值&#xff0c;且该值小于等于 value** param collection 不为null。* param val…