Java 10 新特性解读

article/2025/9/1 3:22:25

前言

 2018年3月21日,Oracle官方宣布Java10正式发布。

 需要注意的是 Java 9 和 Java 10 都不是 LTS (Long-Term-Support) 版本。和过去的 Java 大版本升级不同,这两个只有半年左右的开发和维护期。而未 来的 Java 11,也就是 18.9 LTS,才是 Java 8 之后第一个 LTS 版本。

 JDK10一共定义了109个新特性,其中包含12个JEP(对于程序员来讲,真 正的新特性其实就一个),还有一些新API和JVM规范以及JAVA语言规范上 的改动。

 JDK10的12个JEP(JDK Enhancement Proposal特性加强提议)

参阅官方文档:http://openjdk.java.net/projects/jdk/10/

JDK10的12个JEP

286: Local-Variable Type Inference 局部变量类型推断296: Consolidate the JDK Forest into a Single Repository JDK库的合并304: Garbage-Collector Interface 统一的垃圾回收接口307: Parallel Full GC for G1 为G1提供并行的Full GC310: Application Class-Data Sharing 应用程序类数据(AppCDS)共享312: Thread-Local Handshakes ThreadLocal握手交互313: Remove the Native-Header Generation Tool (javah) 移除JDK中附带的javah工具314: Additional Unicode Language-Tag Extensions 使用附加的Unicode语言标记扩展316: Heap Allocation on Alternative Memory Devices 能将堆内存占用分配给用户指定的备用内存设备317: Experimental Java-Based JIT Compiler 使用基于Java的JIT编译器319: Root Certificates 根证书322: Time-Based Release Versioning 基于时间的发布版本

局部变量类型推断  

 产生背景

开发者经常抱怨Java中引用代码的程度。局部变量的显示类型声明,常常被认为 是不必须的,给一个好听的名字经常可以很清楚的表达出下面应该怎样继续。

好处:

减少了啰嗦和形式的代码,避免了信息冗余,而且对齐了变量名,更容易阅读!

 场景一:

类实例化时

作为 Java开发者,在声明一个变量时,我们总是习惯了敲打两次变量类型,第 一次用于声明变量类型,第二次用于构造器。

LinkedHashSet set = new LinkedHashSet<>();

 场景二:

返回值类型含复杂泛型结构

变量的声明类型书写复杂且较长,尤其是加上泛型的使用

Iterator<Map.Entry<Integer, Student>> iterator = set.iterator();

  场景三:

我们也经常声明一种变量,它只会被使用一次,而且是用在下一行代码中, 比如:

URL url = new URL("http://www.atguigu.com");
URLConnection connection = url.openConnection();
Reader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

 尽管 IDE可以帮我们自动完成这些代码,但当变量总是跳来跳去的时候,可读 性还是会受到影响,因为变量类型的名称由各种不同长度的字符组成。而且,有时候开发人员会尽力避免声明中间变量,因为太多的类型声明只会分散注意力,不会带来额外的好处。

工作原理 

在处理 var时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行 推断,作为左边变量的类型,然后将该类型写入字节码当中。

注 意

 var不是一个关键字

你不需要担心变量名或方法名会与 var发生冲突,因为 var实际上并不是一个关键字,而是一个类型名,只有在编译器需要知道类型的地方才需要用到它。除此之外,它 就是一个普通合法的标识符。也就是说,除了不能用它作为类名,其他的都可以, 但极少人会用它作为类名。

 这不是JavaScript

首先我要说明的是,var并不会改变Java是一门静态类型语言的事实。编译器负责推 断出类型,并把结果写入字节码文件,就好像是开发人员自己敲入类型一样。 下面是使用 IntelliJ(实际上是 Fernflower的反编译器)反编译器反编译出的代码:

从代码来看,就好像之前已经声明了这些类型一样。事实上,这一特性只发 生在编译阶段,与运行时无关,所以对运行时的性能不会产生任何影响。所以请放心,这不是 JavaScript。

适用于以下情况:

//1.局部变量的初始化
var list = new ArrayList<>();
//2.增强for循环中的索引
for(var v : list) {System.out.println(v);
}
//3.传统for循环中
for(var i = 0;i < 100;i++) {System.out.println(i);
}

 在局部变量中使用时,如下情况不适用 :

初始值为null

方法引用 

Lambda表达式 

为数组静态初始化  

不适用以下的结构中 :

 情况1:没有初始化的局部变量声明

 情况2:方法的返回类型

 情况3:方法的参数类型

 情况4:构造器的参数类型

 情况5:属性

 情况6:catch块

集合新增创建不可变集合的方法 

自 Java 9 开始,Jdk 里面为集合(List / Set / Map)都添加了 of (jdk9新增)和copyOf (jdk10新增)方法,它们两个都用来创建不可变的集合,来看下它们的 使用和区别。

//示例1:
var list1 = List.of("Java", "Python", "C");
var copy1 = List.copyOf(list1);
System.out.println(list1 == copy1); // true//示例2:
var list2 = new ArrayList<String>();
var copy2 = List.copyOf(list2);
System.out.println(list2 == copy2); // false

示例1和2代码基本一致,为什么一个为true,一个为false? 

从源码分析 , 可 以 看 出 copyOf 方 法 会 先 判 断 来 源 集 合 是 不 AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创 建一个新的集合。

示例2因为用的 new 创建的集合,不属于不可变 AbstractImmutableList 类的子类,所以copyOf 方法又创建了一个新的实例,所以为false。

注意:使用of和copyOf创建的集合为不可变集合,不能进行添加、删除、替换、 排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。

上面演示了 List 的 of 和 copyOf 方法,Set 和 Map 接口都有。

 


http://chatgpt.dhexx.cn/article/BP1KCIal.shtml

相关文章

【小家java】java10新特性(简述十大新特性) 小步迭代

相关阅读 【小家java】java5新特性&#xff08;简述十大新特性&#xff09; 重要一跃 【小家java】java6新特性&#xff08;简述十大新特性&#xff09; 鸡肋升级 【小家java】java7新特性&#xff08;简述八大新特性&#xff09; 不温不火 【小家java】java8新特性&#xff0…

IP地址与端口Port

IP地址 IP地址&#xff1a;InetAddress 唯一定位一台网络上的计算机127.0.0.1 &#xff08;本机localhost&#xff09; IP地址的分类 IPv4&#xff1a;网际协议版本4&#xff08;英语&#xff1a;InternetProtocolversion4&#xff0c;IPv4&#xff09;&#xff0c;又称互联网…

Port端口

一、端口号的定义 端口表示当前计算机上的一个进程。 例如&#xff1a;手机开着 微信 王者 QQ 这时候我们使用QQ给对方发送一条消息&#xff0c;这时我们要知道对方的ip地址&#xff0c;这样才能到达指定的位置&#xff0c;但是消息到了指定位置&#xff0c;又怎么知道这个消…

linux普通用户使用1024以下的端口(80)

linux对于非root权限用户不能使用1024以下的端口&#xff0c;对于一些服务&#xff0c;过高的权限&#xff0c;会带来一定的风险。那么对于低权限的用户如何对外开放1024以下的端口。我这里找到几种办法并且亲测可行 首先搭建环境centos7 账户tengine没有sudo 权限 1.nginx 等…

价值连城的神站:广西图书馆的电子资源(视频、书、期刊...)

网站地址&#xff1a;http://wap.gxlib.org.cn:9080/ermsClient/browse.do广西壮族自治区图书馆的电子资源平台&#xff0c;该平台开放注册&#xff0c;注册登录成功后可以免费使用平台内的所有资源。该平台的资源库异常丰富&#xff0c;可以说是在线图书馆该有的资源这里都有了…

IMC美丽链:区块链与世界上最大的酿酒商的恩怨情仇!

酒业巨头Anheuser-Busch InBev旨在通过区块链技术改变数字广告供应链。 现在我们在网上&#xff0c;到处都可以看到广告。但是其实很多都是欺诈信息&#xff0c;比如我们上网站购物&#xff0c;可能就会遇到有欺诈广告&#xff0c;导致我们买到假货。 或者是我们在网上搜索&a…

2021年中国苹果行业产业链分析:上下游市场稳定,苹果行业市场运行情况平稳增长 [图]

一、概述 苹果目前是世界四大水果之首&#xff0c;苹果产业链上游主要由种子、肥料、农药等构成&#xff0c;下游主要加工成果脯、苹果干、苹果酒和苹果醋等。 苹果产业链 资料来源&#xff1a;智研咨询整理 二、上游产业 化肥是农业生产中一种十分常见的生产资料&#xff0c;…

这两个世界此次对决之后,“互联网+”与数字化真的要来了

昨天&#xff0c;微信上一个朋友忧心忡忡的问了我一个问题&#xff0c;“这次疫情对传统企业影响巨大&#xff0c;好多企业迟迟不能复工&#xff0c;面临生死存亡的挑战。你觉得这对于我们这样的数字化转型服务的公司来说&#xff0c;会有什么影响呢&#xff1f;” 我的回答是…

说出来你可能不信,现在连酒厂都在招算法工程师

原创&#xff1a;HyperAI超神经 关键词&#xff1a;啤酒 智能酿造 根据数据显示&#xff0c;从 1960 年代至今&#xff0c;啤酒的受欢迎程度每年增加&#xff0c;逐渐成为了消耗量最大的饮品之一。 到 2017 年的统计数据&#xff0c;中国人均啤酒年消耗达到了 60 瓶之多。…

中国企业软件必然革命世界企业软件

&#xff08;1&#xff09;先扯点没用的&#xff1a;宏观经济环境 三架马车&#xff1a;出口、固定资产投资、消费。 我丝毫不怀疑中国会在2035年&#xff0c;GDP超过美国。也就是说&#xff0c;我们总体来说&#xff0c;坐在中国这艘上升发展的飞机上&#xff0c;享受着红利。…

[机器学习笔记] 用Python分析:红葡萄酒质量分析(数据探索)

用Python分析&#xff1a;红葡萄酒质量分析&#xff08;数据探索&#xff09; 数据集&#xff1a;winemag-data_first150k.csv 先来导入数据 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import statsmodels.api as sm …

区块链 - 区块链基础知识:交易哈希链

区块链 - 区块链基础知识&#xff1a;深入了解交易哈希链 本文的主题是执行有关交易哈希链、 交易池的角色以及 一个最长的区块链如何永远占据主导。 讨论的细节包括以下内容&#xff1a; 事务哈希链的实现细节 交易池的角色 为什么需要共识算法 PoW vs PoS为什么最长的区块…

2018世界杯热点运营活动案例剖析

一、产品与活动概况 此次选取的产品除了本品同程艺龙(微信火车票机票)外,还包括全民应用支付宝和美团。其中本品世界杯主题的运营活动是“支持你的主队-赢球衣”,支付宝的是“猜世界杯-赢蚂蚁积分”,美团的是“燃烧看球-竞猜赢百万大奖”。 1. 同程艺龙:“支持你的主队…

翼次元空间资讯:区块链互联网酒业“心直酒快”有动作

本文由BitCOO、4COO全球运营官社区网络中国区节点与TokenRiseValueBoost | Chain产业链、FUND、Value与BrandFin品牌价值燃焕力中心、FintechX金融科技发展中心、孵化器WiTx链智星云 翼次元空间 Ai&Hi_AiHi/AiHiX研究中心授权发布 —— 由FinRise奋睿资本投资、翼次元空间孵…

黄铭钧:院长创业与酒

采访 | Rosalie 录音整理 | 储鑫垚 作者 | 朱芳文、刘韧 来源 | 链英雄 黄铭钧的自画像 “仗义&#xff1f;什么仗义&#xff1f;” “像乔峰&#xff1f;不可能。” 新加坡科学院院士&#xff0c;新国大计算机学院前院长、世界顶级数据库专家黄铭钧&#xff08; Beng Chin Ooi…

解密小米生态链:从构建到定义产品

1990年的雷军 互联网界有这样一种共识&#xff1a;十亿美元做产品&#xff0c;百亿美元做平台&#xff0c;千亿美元做生态。 纵观当前中国互联网企业&#xff0c;真正能够称得上形成生态的企业不过ATM三家而已&#xff0c;这也是为什么我相信小米值1000亿美金。 每一波互联网…

链读推荐:从瓷砖到生成式 NFT

Erick Calderon&#xff0c;又名“Snowfro”&#xff0c;一年前作为NFT生成艺术平台Art Blocks的创建者一举成名。但他的加密之旅是一个迂回的过程。 在与父亲一起创立的瓷砖公司工作了近十年后&#xff0c;Calderon在2013年第一次从他的兄弟那里听说了比特币。开车&#xff0…

我与世界杯足球那些事——世界杯征文

征文活动链接&#xff1a; https://bbs.csdn.net/topics/609601920 目录 第一次了解世界杯 第一次观看世界杯 世界杯主题曲 我最热爱的球员 今年世界杯 预测冠军 第一次了解世界杯 提起世界杯&#xff0c;我可能了解的比较晚一些&#xff0c;是在2014年的巴西世界杯的时…

数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

基于51单片机的酒精浓度检测仪设计

本设计仅供参考 基于51单片机的酒精浓度检测仪设计&#xff08;proteus仿真程序原理图报告&#xff09; 原理图&#xff1a;Altium Designer 仿真&#xff1a;proteus 8.9 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号C0031 功能说明&#xff1a; 由S…