美国上市公司,专注Java培训21年

Java 10将于本月发布,它会改变你写代码的方式


2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,随后,Oracle发言人Donald Smith在他的博客中确认了这一消息。该决定将在Java 9正式发布之后开始实行,也就是说,Java的下一个发布日期是2018年3月。

新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。与现在的发布周期不同,新的发布计划不会为了等待某个主要特性完成而延期。如果一个特性还没有完成,它就不会被合并到发布用的代码仓库里。如果错过了一个版本,就要等待下一次发布。在此之前,Java 8也因为安全问题延期了8个月左右,Java 9因为模块化系统(Jigsaw)问题一再延期,比预期晚了18个月发布。

也就是说,作为一个Java开发,你使用的编程语言,每半年都会有一个新的版本出来。这无疑是一件好事儿。

随着新技术的不断退出,对于开发者的挑战也就越来越大。像我在我的文章中多次提到过的观点:作为一个开发人员,最大的挑战就是如何保证自己了解新的技术。好在你现在关注了Hollis,我会和你一起学习这些新技术。

按照上面提到的Java发布进度,Java 10将于本月发布。因为Java 10的时间线较短,范围也相对较小,所以Java 10的变更将通过JEP进行跟踪。

有望被包含在Java 10中的特性是那些已经处于Targeted或Proposed状态的JEP,它们包括:

286:本地变量类型推断

296:统一JDK仓库

304:垃圾回收器接口

307:G1的并行Full GC

310:应用程序类数据共享

312:ThreadLocal握手机制

本文,主要来介绍一个特性:本地变量类型推断。因为他将改变你写代码的方式。

什么是本地变量推断

他其实是一个新的语法糖,在我的GitChat《深入分析Java语法糖》中我详细介绍过目前Java中的所有语法糖及其背后的原理。Java现在在逐渐往多糖语言转变,从Java 7开始便有意的开始加入语法糖。同样,为了方便和简化开发,Java 10将提供一个新的语法糖——本地变量类型推断。

类型推断,并不是Java语言独有的特性,许多流行的编程语言,比如C++, C#以及Go,在定义过程中,都提供一种局部变量类型推断的功能(例如C++提供了auto 关键字,C#提供var关键字)。

在当前版本的Java中,我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型,如下面的片段所示:

MyObject value = new MyObject();

List list = new ArrayList();

在Java 10中,你可以这样定义对象:

var value = new MyObject();

var list = new ArrayList();

正如你所看到的,本地变量类型推断将引入“var”关键字,而不需要显式的规范变量的类型。

很简单,如果你想使用这个特性,就在你定义局部变量的时候引入var关键字就可以了。至于他背后的实现原理,我会单独开一篇文章来解语法糖。

背后的故事

在JEP 286诞生之前,Oracle曾做过一个调查,主要是想看看社区对于这一特性的反应。

第一个调查是:你认为Java引入局部变量的类型推断咋样?

Java 10将于本月发布

第二个调查是:你希望使用哪个关键字来定义变量?

Java 10将于本月发布

从上面的两个调查,我们可以知道,这一特性是受到广大开发者欢迎的,因为他确实方便了很多。

他将如何影响你的代码

当一个新特性来临的时候,我们首先要问自己一个问题:这将如何影响我的代码? 下面我们来看下这一特性可以使用在哪些场景中,以及在哪些场景中不能使用。

适用范围:

初始化局部变量

一定是初始化的时候,只是定义是不可以的。如var foo;不可以,但是var foo = "Foo";可以。

增强for循环的索引

如for (var nr : numbers)

传统for循环的局部变量定义

如 for (var i = 0; i < numbers.size(); i++)

不适用范围:

方法的参数

构造函数的参数

方法的返回值类型

对象的成员变量

只是定义定义而不初始化

总结

在Java 10之后你在声明局部变量类型的时候可以使用var来告知编译器进行类型推断。这仅仅发生在变量初始化的阶段,就像 var s = "";这样。 此外,也可以是用在普通for循环和增强for循环中。

除了局部变量之外,另外在属性和方法返回值类型中,不能使用var。 这样做是为了避免引起一些无法预知的错误。

尽管引入var变量会使代码可读性变得更糟,但此次的新特性为开发者提供了一种在编写复杂表达式的时候寻求了一个新的契机。

感谢大家阅读由Java教程分享的“Java 10将于本月发布”希望对大家有所帮助,更多精彩内容请关注Java培训机构官网

免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • java语言中,char 类型变量是否能保存一个汉字?
    java语言中,char 类型变量是否能保存一个汉字?
    在 Java 语言中,可以使用 char 类型的变量来存储单个的字符,请问是否能用 char 类型的变量来存储一个汉字呢? 详情>>

    2015-10-15

  • 有史以来最牛的一张程序员职业路线图!
    有史以来最牛的一张程序员职业路线图!
    最近在琢磨程序员到底路在何方,经过不断的自虐和代入,终于在迷雾森林中得图一张,看之豁然开朗。独乐乐不如众乐乐,share了: 详情>>

    2018-05-22

  • java中变量和常量有什么区别?
    java中变量和常量有什么区别?
    在使用 Java 语言进行程序设计时,经常需要用到常量和变量来存储信息。请简单叙述变量和常量有什么区别? 详情>>

    2015-10-15

  • short 和 char 类型的取值范围各是多少?
    short 和 char 类型的取值范围各是多少?
    在使用 Java 语言进行程序设计时,经常需要使用 short 型和 char 型存储数值,请简述short 型和 char 型的取值范围各是多少? 详情>>

    2015-10-15

  • Java开班时间

    收起