阶段十-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单纯形复杂体由点、线段、三角形、四面体及其相应的组合…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...
