JDK 10 新特性详解
📅 2026/7/14 18:47:51
👁️ 次浏览
JDK 10 新特性详解JDK 10 于2018年3月20日正式发布,是 JDK 采用新的半年发布周期后的第二个版本(非 LTS)。虽然 JDK 10 不是 LTS 版本,但它引入了var局部变量类型推断这一里程碑特性,以及一系列 JVM 层面的重要优化(G1 并行 Full GC、AppCDS、线程本地握手等),为后续 JDK 版本奠定了基础。目录局部变量类型推断(var 关键字)集合增强 — 不可变集合工厂Optional.orElseThrow()ByteArrayOutputStream 新增方法URLEncoder / URLDecoder 增强其他 API 增强G1 并行 Full GC应用类数据共享(AppCDS)线程本地握手(Thread-Local Handshakes)垃圾回收器接口备用内存设备上的堆分配实验性 JIT 编译器(Graal)基于时间的版本发布方案JDK 10 特性总览表1. 局部变量类型推断(var 关键字)1.1 概述var是 JDK 10 最重要的特性(JEP 286),允许在局部变量声明时省略显式类型,由编译器根据初始化表达式自动推断类型。核心规则:规则说明仅限局部变量不能用于字段、参数、返回类型必须有初始化器var x;编译报错不能初始化为nullvar x = null;编译报错(无法推断类型)不是关键字var是保留类型名,不是关键字不影响运行时编译后与显式类型完全相同支持泛型推断自动推断泛型参数支持钻石操作符var list = new ArrayListString();支持增强 for 循环for (var entry : map.entrySet())不支持传统 for 循环初始化for (var i = 0; ...)可以,但var i, j不行适用场景:长类型名的简化(如MapString, ListInteger)泛型推断简化增强 for 循环中减少冗余提高代码可读性(当类型名不重要时)不适用场景:类型信息对可读性很重要时初始化表达式类型不明确时需要声明特定接口类型时1.2 代码案例// ============ 1. 基本用法 ============// 显式类型(JDK 10 之前)Stringname="Hello";intcount=42;doubleprice=19.99;ListStringlist=newArrayList();// var 推断(JDK 10)varname2="Hello";// 推断为 Stringvarcount2=42;// 推断为 intvarprice2=19.99;// 推断为 doublevarlist2=newArrayListString();// 推断为 ArrayListString// 编译后完全等价,var 只是语法糖System.out.println(name2.getClass().getName());// java.lang.String// ============ 2. 泛型简化 ============// JDK 10 之前MapString,ListIntegermap1=newHashMapString,ListInteger();MapString,MapString,Integernested1=newHashMap();// JDK 10 varvarmap2=newHashMapString,ListInteger();varnested2=newHashMapString,MapString,Integer();// 使用map2.put("key",List.of(1,2,3));nested2.put("outer",Map.of("inner",42));// ============ 3. 增强 for 循环 ============varlist=List.of("Alice","Bob","Charlie");// JDK 10 之前for(Stringname:list){System.out.println(name);}// JDK 10 varfor(varname:list){System.out.println(name);}// Map 遍历varmap=Map.of("a",1,"b",2,"c",3);// JDK 10 之前for(Map.EntryString,Integerentry:map.entrySet()){System.out.println(entry.getKey()+"="+entry.getValue());}// JDK 10 varfor(varentry:map.entrySet()){System.out.println(entry.getKey()+"="+entry.getValue());}// ============ 4. Stream 操作结果 ============varnumbers=List.of(1,2,3,4,5);// 推断为 ListIntegervarfiltered=numbers.stream().filter(n-n2).collect(Collectors.toList());// 推断为 OptionalIntegervarmax=numbers.stream().max(Integer::compareTo);// 推断为 OptionalStringvarfirst=numbers.stream().map(Object::toString).findFirst();// ============ 5. try-with-resources 中使用 ============// JDK 10 之前try(BufferedReaderreader=newBufferedReader(newFileReader("file.txt"))){System.out.println(reader.readLine());}// JDK 10 vartry(varreader=newBufferedReader(newFileReader("file.txt"))){System.out.println(reader.readLine());}// 多个资源try(
在实际意大利语学习过程中,很多初学者会发现,即使掌握了基础的语法和词汇,一旦进入真实的购物、点餐等生活场景,依然会感到手足无措。本文将以一个非常具体且高频的场景——“在意大利商店购物时,如何表达‘15欧&#…
📅 2026/7/14 18:47:51
1. 项目概述:从理论到实践的MRF能量最小化如果你正在寻找一个能真正将计算机视觉、图像处理或机器学习中的概率图模型理论落地的实战项目,那么“基于C的马尔科夫随机场能量最小化”绝对是一个绝佳的选择。这不仅仅是一个算法实现,它更像是一个…
📅 2026/7/14 18:47:51
1. I2C GPIO扩展器是什么?当你用单片机做项目时,最常遇到的瓶颈就是GPIO口不够用。比如要控制16个LED,但你的STM32只剩8个GPIO,这时候PCA9555这类I2C GPIO扩展器就像给你的开发板插上了"外挂"——通过两根I2C线…
📅 2026/7/14 18:46:51
各位工程师好,这里是 EVST(以物思)的官方技术账号。CSDN 这个号,想用来做一件事:把工业机器人集成里真正吃功夫的工程问题摊开来讲。 不是讲「机器人有几个轴」「重复定位精度 0.02mm」这种参数表能查到的东西…
📅 2026/7/14 19:38:00
在图像处理和机器视觉项目中,图像滤波(Image Filtering) 是最常见的预处理步骤之一。相机采集的图像通常会受到光照、传感器噪声或环境干扰的影响,因此在进行阈值分割、边缘检测、模板匹配等操作之前,通常都会先进行滤波处理,以提高后续算法的稳定性。
本文将介绍 OpenC…
📅 2026/7/14 19:38:00
在会议会展场地租赁行业,企业最常见的问题不是没有业务能力,而是线索分散、获客成本高、交易链路长。很多商家同时在做搜索投放、信息平台、社群传播和老客户转介绍,但流量到了微信或电话端后,仍然依赖人工解释、反复报价和线下确…
📅 2026/7/14 19:38:00
这篇我按“先跑起来、再讲取舍”的方式写《程序员职业规划怎么选方向?先回答几个现实问题》。概念会讲,但重点放在代码怎么组织、哪里容易踩坑。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做,…
📅 2026/7/14 19:38:00
这篇我按“先跑起来、再讲取舍”的方式写《程序员就业怎么选方向?先回答几个现实问题》。概念会讲,但重点放在代码怎么组织、哪里容易踩坑。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做,以及…
📅 2026/7/14 19:38:00
文章目录 前言使用场景先讲清楚代码阅读顺序重点实现细节完整代码容易踩坑的地方收个尾 前言
这篇继续聊 HarmonyOS7 里的 密码显示切换。如果你刚开始学 ArkUI,不建议一上来就背属性名,那样很容易看完就忘。更好的方式是先搞清楚:这个页面想…
📅 2026/7/14 19:37:00
从“创始人投影”到“真理映射”——大语言模型认知本质的哲学批判与范式重构
摘要
当前全球主流大语言模型(LLMs)在技术指标上持续突破,却在认知本质上陷入了一种根本性的“搞反”状态:它们本应成为人类超越自身认知局限的“传…
📅 2026/7/14 0:00:05
Hadoop 3.2.2 JDK 21 Windows开发环境全流程实战指南对于需要在Windows环境下进行大数据开发的Java/Scala开发者来说,搭建一个本地Hadoop开发环境是入门的第一步。本文将带你从零开始,完成Hadoop 3.2.2与JDK 21的环境搭建,并实现一个完整的M…
📅 2026/7/14 0:00:05
1. 项目概述:为什么你需要Boost库? 如果你用C写过一些项目,尤其是涉及到网络、并发、文件系统或者需要处理一些复杂数据结构时,大概率会听过或者用过Boost库。它不是C标准库的一部分,但它在C社区的地位,几…
📅 2026/7/14 0:00:05
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/13 19:47:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56