阶段十-java新特性
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<>() {@Overridepublic 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中可以为一个nullStream<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>();//不能推断的情况//初始值为nullvar 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//示例1var list1 = List.of("AA","BB","CC");var list2 = List.copyOf(list1);System.out.println(list1==list2);//true//示例2var 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);}
}
相关文章:
阶段十-java新特性
JDK9新特性 1.模块化系统 jar包结构的变化 jar -》model -》package -》class 通过不同的模块进行开发 每个模块都有自己的模块配置文件module-info.java 2.JShell JDK9自带的命令行开发,在进行简单的代码调试时可以直接编译使用 可以定义变量,方法&…...
win10重装系统历程
win10系统更新出问题了,重置系统卡死,遂决定重装。 微软官方工具制作U盘启动盘, 进行到分区时,一冲动把盘都格式化了, 后面了解到,即便进不了系统也有办法备份数据的... 进行到安装时,提示W…...
【知识积累】深度度量学习综述
原文指路:https://hav4ik.github.io/articles/deep-metric-learning-survey Problem Setting of Supervised Metric Learning 深度度量学习是一组旨在衡量数据样本之间相似性的技术。 Contrastive Approaches 对比方法的主要思想是设计一个损失函数,直…...
webrtc网之sip转webrtc
OpenSIP是一个开源的SIP(Session Initiation Protocol)服务器,它提供了一个可扩展的基础架构,用于建立、终止和管理VoIP(Voice over IP)通信会话。SIP是一种通信协议,用于建立、修改和终止多媒体…...
【Spring】依赖注入之属性注入详解
前言: 我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Co…...
6-tornado配置文件的使用(命令行解析、文件设置)
tornado.options options 可以让服务运行前提前设置参数,而常见的2种设置参数方式为:1. 命令行设置 2. 文件设置命令行解析 使用tornado.options.define前定义,通常在模块的顶层。 然后,可以将这些选项作为以下属性的属性进行访…...
k8s ingress service endpoints 解决微信服务器验证问题(内网穿透)
最近公司要搞微信公众号开发,想用自己公司内网的电脑调试,但涉及到微信服务器地址(URL)验证的问题(内网穿透),查了网上一堆文章有推荐ngrok的,但被微信墙了;有推荐sunny-ngrok的,免费…...
postgresql-effective_cache_size参数详解
在 PostgreSQL 中,effective_cache_size 是一个配置参数,用于告诉查询规划器关于系统中可用缓存的估计信息。这个参数并不表示实际的内存量,而是用于告诉 PostgreSQL 查询规划器系统中可用的磁盘缓存和操作系统级别的文件系统缓存的大小。它用…...
CUDA锁页内存的使用
1.定义指针变量 float *host_Weights; // 锁页内存 float *dev_Weights; // 设备端内存2.分配内存 cudaHostAlloc((void**)&host_Weights, numInputs * sizeof(float), cudaHostAllocDefault); // 用锁页内存,可以有效加快数据传递速度 cudaMalloc((vo…...
python常见代码用法
1.result [[]] * n 和 result [[] for _ in range(n)] 辨析 n 3 result [[]] * nprint(result) # 输出:[[], # [], # []]print(result[0] is result[1] is result[2]) # 输出:True* 运算符进行复制,这些空列表实际…...
MTU TCP-MSS(转载)
MTU MTU 最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。 是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时…...
【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】
请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 SNOOPer 介绍SNOOPer 主要功能:SNOOPer 使用场景SNOOPer.ERRORSTOPSNOOPer.ModeSNOOPer.PCSNOOPer.RateSNOOPer.SELectSNOOPer.SIZESNOOPer.TDelaySNOOPer.TOutSNOOPer.TValueSNOOPer PC 采样Trace32 SNOOPer 介绍 在 Laut…...
MySQL笔记-第11章_数据处理之增删改
视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第11章_数据处理之增删改1. 插入数据1.1 实际问题1.2 方式1:VALUES的方式添加1.3 方式2:将查询结果插入到表中 2. 更…...
ANSYS常见error解答(转)
根据SimC结构工作室这段时间的答疑总结,给出了部分关于ANSYS常见error的解释说明,希望对大家有所帮助。 1.KBC is not a recognized BEGIN command, abbreviation, or macro.This command will be ignored. 答:ANSYS 对命令的使用有严格的规…...
【Let‘s Encrypt SSL】使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书
安装acme.sh 安装 acme.sh 并设置邮箱用来接受重要通知,如证书快过期未更新通知 curl https://get.acme.sh | sh -s emailmyexample.com执行命令后几秒就安装好了,如果半天没有反应请 CtrlC 后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下…...
XML学习及应用
介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备…...
Docker部署Nacos集群并用nginx反向代理负载均衡
首先找到Nacos官网给的Github仓库,里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理,负载均衡…...
C++STL的stack和queue(超详解)
文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列150. 逆波兰表达式求值 stack的模拟实现queue的模拟实现dequedeque底层设计 前言 栈和队列这一块其实有数据结构的基础,学起来非常简单。 stack 栈的成员函数就这么写,除了emplace其他都已经非…...
【C语言实现windows环境下Socket编程TCP/IP协议】
C语言实现windows环境下Socket编程TCP/IP协议 主要是记录解决一些在我本地编译运行时出现的问题connect :No error关于头文件关于stray /xxx和socket:No error问题千万记得是服务器先启动哦,客户端后启动下面附上我改好的代码 主要是记录解决…...
CGAL的3D简单网格数据结构
由具有多个曲面面片的多面体曲面生成的多域四面体网格。将显示完整的三角剖分,包括属于或不属于网格复合体、曲面面片和特征边的单元。 1、网格复合体、 此软件包致力于三维单纯形网格数据结构的表示。 一个3D单纯形复杂体由点、线段、三角形、四面体及其相应的组合…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
Gitlab + Jenkins 实现 CICD
CICD 是持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD)的缩写,是现代软件开发中的一种自动化流程实践。下面介绍 Web 项目如何在代码提交到 Gitlab 后,自动发布…...
