这可能是【Java10】新特性中,最流行和最有用的了!!!

编码之外

共 2716字,需浏览 6分钟

 ·

2021-06-13 03:40


庆哥

读完需要

7
分钟

速读仅需 3 分钟

在今年的 9 月份就要发布 Java 历史以来第三个长期支持版本 Java 17 了,不知道你作何感想……

我知道大家目前对待 JDK 的态度是这样的:

新版任你发,我就用 Java8!


但是我今天要和大家分享的是 Java 10 中新添加的一个特性,而且这个特性我觉得是大家非常有必要了解和学习的一个特性,以至于大家可以把 Java 8 升级到 Java 11,当然,是在我们平常的学习当中!

/ var 初体验 /

是什么呢?我们先来看段代码:

public class HelloWorld {    public static void main(String[] args) {        String s = "庆哥java";        System.out.println(s);    }}

这段代码太简单了,其实重点是以下这个:

public class HelloWorld {    public static void main(String[] args) {        var s = "庆哥java";        System.out.println(s);    }}

怎么样,是不是不一样了呢?你可能会说,这不行吧,的确,我目前的编译环境是 java8,自然不行:

我现在将其切换到 java10:

这个时候代码无误,正常编译打印:

我们还可以这样:

  var s = "庆哥java";  var i = 10;
String s1 = "庆哥java"; int i1 = 10;


注意下区别!也就是说在 java 10 中新添加的这个特性 var,其实准确来说这并不是一个关键字,这个特性之前在 java9 中就已经出现,但是后来又给删除了,咱也不知道为啥,咱也不敢问!


有了这个 var,正如你所看到的那样,我们可以直接使用这个 var 来声明变量,而不用管你到底是 String 还是 int,咋样,是不是感觉很方便,这样一来,我们编码的效率是不是会大大提高了嘞!

/ 局部变量类型推断 /

说起来,这个特性叫做局部变量推断,我们看这行代码:

 String s1 = "庆哥java";

你如果你要声明一个字符串类型,那就需要先使用 String 去声明,同理如果你想声明一个整型变量,那就得使用 int 去声明,这看起来很正确,但是实际编码中却感到麻烦,因为你需要写各种不同的变量声明,一定程度是不是增加了代码的难度和复杂度!

那些不学 java 的可能会说,使用 python 或者 js 可以一分钟搞定的事情,要是用 Java 来做可能得 10 分钟,我觉得这个锅,要用各种不同变量声明这种特性要背一点!

作为一门长久不衰的高级语言,java 应该很智能的才对,当我写出“庆哥 java”你就应该知道我这个声明的是个字符串变量,而不用很呆板的在前面加上个 String 类型你才知道是字符串变量,同理,像整型 int 也该如此!

这个其实就是局部变量类型推断,根据具体的数值变量推断出其变量类型,而且这个功能在其他语言上早就有了!

想必学过 js 的看到这个 var 应该很熟悉吧,js 中早就在用这个 var 了,详细点来说,这种局部变量推断在其他语言上早已应用,具体为:

  1. js 中的 let 和 var

  2. Scala 和 kotlin 中的 var 和 val

  3. C++中的 auto

  4. C#中的 var 通过使用:=运算符声明来支持

而 java,为啥没有,这不应该啊,一句扎心的话,在 java10 之前啊,我们的大 java 是唯一没有局部变量类型推断或者支持 var 关键字的语言!

想想就觉得,真的不应该!

/ java 中对类型推断的支持 /

这里有个知识点,在 java 中,其实也是对类型推断这块做了努力的,在 java8 中引入了 lambda 表达式,方法引用和 Stream 等都是对类型推断做了很大改进,说实话,这几块自己还是需要花时间好好研究研究!

虽然上述说的对类型推断做了改进,但是你还是得机械的呆板的加上正确的类型来声明局部变量!

我这里一直在强调局部变量,你看这个:

懂我意思了吧!要不然人家咋叫做局部变量类型推断呢!

回到上面所说的,java 好像对局部变量类型推断不怎么感冒啊,可是,没关系,现在 java10 的到来,终结了这一尴尬现象,咱们的 java 也有 var 了!

/ var 使代码变得简洁 /

先来个栗子:

public static void main(String[] args) {        var str = "庆哥java";  //自动推断str的类型为String        var list = new ArrayList<String>();  //自动推断出ArrayList<String>    }

有没有发现,使用 var 之后代码变得更加简洁了,我们以上面这个 list 为例,加入我们不适用 var 的话是不是需要这样书写:

ArrayList<String> strings = new ArrayList<String>();

但是使用 var 使用,我们可以直接省略前面的 ArrayList,这是不是就是减少了重复使得你的代码更加的简洁呢?

/ 关于 var 使用的一些注意事项 /

我们可以看到,var 的使用还是比较简单的,但是在使用它的时候依然有一些事情需要我们特别注意,一不小心,你可能就搞错了!

正如上面给大家所展示的那样,我们使用 var 可以自动帮我们进行局部变量类型的推断,这里你需要知道的是,这个局部变量的类型是由编译器帮我们推断的!

我们一直在说局部变量类型推断,因此,这个 var 只能用于声明局部变量,比如方法内部,初始化代码块上以及 for 循环中声明的局部变量!

要记住,你是不能使用它来声明成员变量或者字段的,这点要注意,请记住,人家是“局部变量类型推断!”

我们看似 var 是一个关键字,但是实际上它并不是一个关键字,而是一个保留的类型名称,这一点也是需要大家注意的!

好了,本篇文章给大家简单介绍了 java10 中的新特性,话说,你喜欢这个 var 吗?


浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报