这可能是【Java10】新特性中,最流行和最有用的了!!!
庆哥
读完需要
速读仅需 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 了,详细点来说,这种局部变量推断在其他语言上早已应用,具体为:
js 中的 let 和 var
Scala 和 kotlin 中的 var 和 val
C++中的 auto
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 吗?