JDK10的新特性:本地变量类型var
文章目錄
- 簡介
- 為什么我們需要var
- var使用在什么地方
- var不能用在什么地方
- 其他var的特點
- 總結
簡介
java以面向對象的特性顯著于世并得到了蓬勃的發展。在語言的發展過程中,為了讓java語言更加簡潔和方便使用,JDK也在不斷的進行改進。
今天本文將要介紹一下JDK10中引入的本地變量類型var。
為什么我們需要var
類型推斷是很多編程語言都具有的特性,編譯器可以在我們不指定具體變量類型的情況下推斷出該變量的實際類型。
類型推斷的出現,可以讓程序員的代碼更加靈活,利于維護和編寫。其實我們一直都有使用到類型推斷。
更多內容請訪問www.flydean.com
JDK8中引入的lambda表達式就是類型推斷的一個非常有用的例子:
int maxWeight = blocks.stream().filter(b -> b.getColor() == BLUE).mapToInt(Block::getWeight) .max();上面的例子中blocks是一個Stream類型,在filter中使用到的b實際上就沒有指定其類型,它的類型是從Stream中推斷出來的。
再看一個線程池的例子:
ExecutorService executorService= Executors.newSingleThreadExecutor(); Runnable runnable=new Runnable() {@Overridepublic void run() {log.info("inside runnable");}};executorService.submit(runnable);很多時候,我們從變量的名字就已經知道了這個變量到底是什么類型的,那么上面的例子如果用var來改寫就可以像這樣:
var executorService= Executors.newSingleThreadExecutor(); var runnable=new Runnable() {@Overridepublic void run() {log.info("inside runnable");}}; executorService.submit(runnable);代碼更加簡潔,程序員寫起來也更加方便。
如果上面的例子還不能夠提起你使用var的興趣,那么下面的例子你一定很樂意使用var了。
假如我們有一個非常非常長的類名:
ItIsAVeryLongNameJavaClass itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();寫起來是不是超級麻煩,代碼看起也非常冗余,這時候我們就可以將其簡化為:
var itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();var使用在什么地方
首先var代表的是本地變量,所以,只有本地變量才能夠使用var。
其次var在定義的時候就必須被初始化:
var a; //Invalid Declaration - - Cannot use 'var' on variable without initializer var a = 100; //Valid Declarationvar可以用在for loop中:
for ( var element : elementList){//do something for element }或者這種:
for ( var i = 0 ; i < elementList.size(); i++ ){System.out.println( elementList.get(i) ); }var不能用在什么地方
因為var是本地變量類型,它不能用在類變量的定義中,不能用在方法變量中,不能用在構造函數中,不能用在方法返回中,不能用在catch變量定義中。
public class VarIncorrectUsage {//var user; //Not allowed as class fields//public VarIncorrectUsage(var param){ //Not allowed as parameter //}/*try{} catch(var exception){ //Not allowed as catch formal }*//*public var returnMethod(){ //Not allowed in method return typereturn null;}*//*public Integer parameterMethod( var input ){ //Not allowed in method parametersreturn null;}*/ }注意,var在JVM無法推斷其類型或者可以有很多類型的情況下不能夠使用:
var ints = {1, 2, 3}; var lambda = a -> a; var methodReference = String::concat;上面例子中數組初始化,lambda表達式和方法引用都是不能用var的。
其他var的特點
var不是關鍵字,所以我們可以使用var來做變量名字:
var var = 2; //Valid Declarationint var = 2; //Also valid Declaration因為var是JDK10引入的概念,所以不是向下兼容的。不能夠用低版本的編譯器來編譯var。
var不會影響性能,因為var是在代碼編譯器進行的類型推斷,所以并不會影響到性能。
總結
var是JDK10中引入的一個新的特性,希望大家可以喜歡。
本文的例子https://github.com/ddean2009/
learn-java-base-9-to-20
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
本文作者:flydean程序那些事
本文鏈接:http://www.flydean.com/jdk10-var-local-variable/
本文來源:flydean的博客
歡迎關注我的公眾號:程序那些事,更多精彩等著您!
總結
以上是生活随笔為你收集整理的JDK10的新特性:本地变量类型var的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK11的新特性:HTTP API和r
- 下一篇: JDK10的新特性:var泛型和多个接口