這可能是【Java10】新特性中,最流行和最有用的了!!!
慶哥
讀完需要
速讀僅需 3 分鐘
在今年的 9 月份就要發(fā)布 Java 歷史以來第三個長期支持版本 Java 17 了,不知道你作何感想……
我知道大家目前對待 JDK 的態(tài)度是這樣的:
新版任你發(fā),我就用 Java8!
但是我今天要和大家分享的是 Java 10 中新添加的一個特性,而且這個特性我覺得是大家非常有必要了解和學(xué)習(xí)的一個特性,以至于大家可以把 Java 8 升級到 Java 11,當(dāng)然,是在我們平常的學(xué)習(xí)當(dāng)中!
/ 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);}}
怎么樣,是不是不一樣了呢?你可能會說,這不行吧,的確,我目前的編譯環(huán)境是 java8,自然不行:

我現(xiàn)在將其切換到 java10:

這個時候代碼無誤,正常編譯打印:

我們還可以這樣:
var s = "慶哥java";var i = 10;String s1 = "慶哥java";int i1 = 10;
注意下區(qū)別!也就是說在 java 10 中新添加的這個特性 var,其實準(zhǔn)確來說這并不是一個關(guān)鍵字,這個特性之前在 java9 中就已經(jīng)出現(xiàn),但是后來又給刪除了,咱也不知道為啥,咱也不敢問!
有了這個 var,正如你所看到的那樣,我們可以直接使用這個 var 來聲明變量,而不用管你到底是 String 還是 int,咋樣,是不是感覺很方便,這樣一來,我們編碼的效率是不是會大大提高了嘞!
/ 局部變量類型推斷 /
說起來,這個特性叫做局部變量推斷,我們看這行代碼:
String s1 = "慶哥java";你如果你要聲明一個字符串類型,那就需要先使用 String 去聲明,同理如果你想聲明一個整型變量,那就得使用 int 去聲明,這看起來很正確,但是實際編碼中卻感到麻煩,因為你需要寫各種不同的變量聲明,一定程度是不是增加了代碼的難度和復(fù)雜度!
那些不學(xué) java 的可能會說,使用 python 或者 js 可以一分鐘搞定的事情,要是用 Java 來做可能得 10 分鐘,我覺得這個鍋,要用各種不同變量聲明這種特性要背一點!
作為一門長久不衰的高級語言,java 應(yīng)該很智能的才對,當(dāng)我寫出“慶哥 java”你就應(yīng)該知道我這個聲明的是個字符串變量,而不用很呆板的在前面加上個 String 類型你才知道是字符串變量,同理,像整型 int 也該如此!
這個其實就是局部變量類型推斷,根據(jù)具體的數(shù)值變量推斷出其變量類型,而且這個功能在其他語言上早就有了!
想必學(xué)過 js 的看到這個 var 應(yīng)該很熟悉吧,js 中早就在用這個 var 了,詳細(xì)點來說,這種局部變量推斷在其他語言上早已應(yīng)用,具體為:
js 中的 let 和 var
Scala 和 kotlin 中的 var 和 val
C++中的 auto
C#中的 var 通過使用:=運算符聲明來支持
而 java,為啥沒有,這不應(yīng)該啊,一句扎心的話,在 java10 之前啊,我們的大 java 是唯一沒有局部變量類型推斷或者支持 var 關(guān)鍵字的語言!
想想就覺得,真的不應(yīng)該!
/ java 中對類型推斷的支持 /
這里有個知識點,在 java 中,其實也是對類型推斷這塊做了努力的,在 java8 中引入了 lambda 表達式,方法引用和 Stream 等都是對類型推斷做了很大改進,說實話,這幾塊自己還是需要花時間好好研究研究!
雖然上述說的對類型推斷做了改進,但是你還是得機械的呆板的加上正確的類型來聲明局部變量!
我這里一直在強調(diào)局部變量,你看這個:
懂我意思了吧!要不然人家咋叫做局部變量類型推斷呢!
回到上面所說的,java 好像對局部變量類型推斷不怎么感冒啊,可是,沒關(guān)系,現(xiàn)在 java10 的到來,終結(jié)了這一尷尬現(xiàn)象,咱們的 java 也有 var 了!
/ var 使代碼變得簡潔 /
先來個栗子:
public static void main(String[] args) {var str = "慶哥java"; //自動推斷str的類型為Stringvar list = new ArrayList<String>(); //自動推斷出ArrayList<String>}
有沒有發(fā)現(xiàn),使用 var 之后代碼變得更加簡潔了,我們以上面這個 list 為例,加入我們不適用 var 的話是不是需要這樣書寫:
ArrayList<String> strings = new ArrayList<String>();但是使用 var 使用,我們可以直接省略前面的 ArrayList
/ 關(guān)于 var 使用的一些注意事項 /
我們可以看到,var 的使用還是比較簡單的,但是在使用它的時候依然有一些事情需要我們特別注意,一不小心,你可能就搞錯了!
正如上面給大家所展示的那樣,我們使用 var 可以自動幫我們進行局部變量類型的推斷,這里你需要知道的是,這個局部變量的類型是由編譯器幫我們推斷的!
我們一直在說局部變量類型推斷,因此,這個 var 只能用于聲明局部變量,比如方法內(nèi)部,初始化代碼塊上以及 for 循環(huán)中聲明的局部變量!
要記住,你是不能使用它來聲明成員變量或者字段的,這點要注意,請記住,人家是“局部變量類型推斷!”
我們看似 var 是一個關(guān)鍵字,但是實際上它并不是一個關(guān)鍵字,而是一個保留的類型名稱,這一點也是需要大家注意的!
好了,本篇文章給大家簡單介紹了 java10 中的新特性,話說,你喜歡這個 var 嗎?

