开发者社区> java技术栈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java 10的10个新特性,将彻底改变你写代码的方式!

简介: image Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了。。 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10…… 刚学Java的同学是不是感觉一脸蒙逼?!!! 就连我这个老司机也同样感觉如此! Java 更新越来越快,我们做技术的也要跟上步伐,不然总会慢别人一拍,这新东西从国外到国内应用一般要好几年的时间,如果我们提前了解并应用这些新技术对自己不是坏事。
+关注继续查看
image

Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了。。

这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10……

刚学Java的同学是不是感觉一脸蒙逼?!!!

就连我这个老司机也同样感觉如此!

Java 更新越来越快,我们做技术的也要跟上步伐,不然总会慢别人一拍,这新东西从国外到国内应用一般要好几年的时间,如果我们提前了解并应用这些新技术对自己不是坏事。

Java 10的新特性

说了这么多,看Java 10都会有哪些特性来改变我们写代码的方式呢?!

1.局部变量类型推断

局部变量类型推断可以说是Java 10中最值得注意的特性,这是Java语言开发人员为了简化Java应用程序的编写而采取的又一步,如下图所示。

image

这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。

局部变量类型推断将引入"var"关键字,也就是你可以随意定义变量而不必指定变量的类型,如:

List <String> list = new ArrayList <String>(); 
Stream <String> stream = getStream();

将被下面这个新语法所取代:

var list = new ArrayList <String>(); 
var stream = getStream();

看完是不是有点JS的即视感???越来越像JS了吗?!虽然类型推断在Java中不是一个新概念,但在局部变量中确是很大的一个改进。

说到类型推断,从JDK 5引进泛型,到JDK 7的"<>"操作符允许不绑定类型而初始化List,再到JDK 8的Lambda表达式,再到现在JDK 10的局部变量类型推断,Java类型推断正大刀阔斧的向前发展。

// 该运算符允许在没有绑定ArrayList <>的类型的情况下初始化列表
List <String> list = new LinkedList <>();

局部变量类型推荐仅限于如下使用场景:

  • 局部变量初始化
  • for循环内部索引变量
  • 传统的for循环声明变量

Java官方表示,它不能用于以下几个地方:

  • 方法参数
  • 构造函数参数
  • 方法返回类型
  • 字段
  • 捕获表达式(或任何其他类型的变量声明)

2.GC改进和其他内务管理

JDK 10中有2个JEP专门用于改进当前的垃圾收集元素。

第一个垃圾收集器接口是(JEP 304),它将引入一个纯净的垃圾收集器接口,以帮助改进不同垃圾收集器的源代码隔离。

预定用于Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行。

3.线程本地握手(JEP 312)

JDK 10将引入一种在线程上执行回调的新方法,因此这将会很方便能停止单个线程而不是停止全部线程或者一个都不停。

4.备用内存设备上的堆分配(JEP 316)

允许HotSpot VM在备用内存设备上分配Java对象堆内存,该内存设备将由用户指定。

5.其他Unicode语言 - 标记扩展(JEP 314)

目标是增强java.util.Locale及其相关的API,以便实现语言标记语法的其他Unicode扩展(BCP 47)。

6.基于Java的实验性JIT编译器(JEP 317)

Oracle希望将其Java JIT编译器Graal用作Linux / x64平台上的实验性JIT编译器。

7.根证书(JEP 319)

这个的目标是在Oracle的Java SE中开源根证书。

8.根证书认证程序(CA)

这将使OpenJDK对开发人员更具吸引力,它还旨在减少OpenJDK和Oracle JDK构建之间的差异。

9.将JDK生态整合到单个存储库中(JEP 296)

此JEP的主要目标是执行一些内存管理,并将JDK生态的众多存储库组合到一个存储库中。

10.删除Native-Header生成工具(javah)(JEP 313)

从JDK中移除了javah工具,这个很简单并且很重要。

尝鲜

就像所有其他JDK版本一样,Oracle已经发布了一个Java 10初始候选版本,Java开发者可以下载此版本用来测试新功能。如果你对Java 10抱有期待想提早尝试,那么现在就开始吧!

尝鲜地址:http://openjdk.java.net/projects/jdk/10/

最后的感悟

对于第一点新特性来说确实是一个大的跨越,其他特性或多或少都能带给开发者福音。但最终Java 10会是什么样,或许还会增加更多实用性的新功能或者优化,我们还得期待!

现在要做的就是,赶紧熟悉JDK 8,现在已经是很多互联网企业标配了。如果还在使用JDK4-7,那真的是要OUT了。。

在不久的将来,Java 10将彻底改变你写代码的方式!

推荐:成为架构师的十阶段学习资料

推荐:Spring Boot & Cloud 最强技术教程

推荐:分享一套高级Java笔试题(实拍高清图)

如果对你有用,欢迎分享到朋友圈

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java代码调用oracle存储过程
原文:java代码调用oracle存储过程 一、简介   与调用mysql存储过程类型过程都是如下   1、创建连接 Connection conn = DriverManager.getConnection(url, user, password);   2、创建CallableStatement CallableStatement statement = conn.
1057 0
java代码调用oracle存储过程
一、简介   与调用mysql存储过程类型过程都是如下   1、创建连接 Connection conn = DriverManager.getConnection(url, user, password);   2、创建CallableStatement CallableStatement statement = conn.
796 0
JAVA 多线程——实现创建线程的五种写法
JAVA 多线程——实现创建线程的五种写法
8 0
Java多线程(三)、线程的通信、wait(),notify(),notifyAll()、生产者/消费者问题、创建线程的方式三:实现Callable接口、创建线程的方式四:使用线程池
Java多线程(三)、线程的通信、wait(),notify(),notifyAll()、生产者/消费者问题、创建线程的方式三:实现Callable接口、创建线程的方式四:使用线程池
21 0
数据结构与算法 | 用Java语言实现顺序表真的不难
数据结构与算法 | 用Java语言实现顺序表真的不难
20 0
JAVA一个接口多个实现逐个调用
JAVA一个接口多个实现逐个调用
9 0
教你用纯Java实现一个即时通讯系统(附源码)
教你用纯Java实现一个即时通讯系统(附源码)
44 0
Java:SpringBoot集成JWT实现token验证
Java:SpringBoot集成JWT实现token验证
22 0
Java实现一个打飞机的小游戏
Java实现一个打飞机的小游戏,毕业设计,计算机毕业设计。Java实现一个打飞机的小游戏,毕业设计,计算机毕业设计。Java实现一个打飞机的小游戏,毕业设计,计算机毕业设计。Java实现一个打飞机的小游戏,毕业设计,计算机毕业设计。
54 0
+关注
java技术栈
Java技术栈是一个以 Java 技术为主的原创技术公众号。分享技术包括但不限于 Java 核心技术、多线程编程、Spring Boot、Spring Cloud、缓存、消息队列、架构设计等各种技术干货、Java 面试题、各种技术教程、行业动态等。
301
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载