最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK10新特性之本地變量類型var的深入理解

 更新時間:2020年05月17日 09:58:51   作者:flydean  
這篇文章主要給大家介紹了J關于DK10新特性之本地變量類型var的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JDK10具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

簡介

java以面向?qū)ο蟮奶匦燥@著于世并得到了蓬勃的發(fā)展。在語言的發(fā)展過程中,為了讓java語言更加簡潔和方便使用,JDK也在不斷的進行改進。

今天本文將要介紹一下JDK10中引入的本地變量類型var。

為什么我們需要var

類型推斷是很多編程語言都具有的特性,編譯器可以在我們不指定具體變量類型的情況下推斷出該變量的實際類型。

類型推斷的出現(xiàn),可以讓程序員的代碼更加靈活,利于維護和編寫。其實我們一直都有使用到類型推斷。

JDK8中引入的lambda表達式就是類型推斷的一個非常有用的例子:

int maxWeight = blocks.stream().filter(b -> b.getColor() == BLUE).mapToInt(Block::getWeight)
.max();

上面的例子中blocks是一個Stream<Block>類型,在filter中使用到的b實際上就沒有指定其類型,它的類型是從Stream中推斷出來的。

再看一個線程池的例子:

ExecutorService executorService= Executors.newSingleThreadExecutor();
Runnable runnable=new Runnable() {
 @Override
 public void run() {
  log.info("inside runnable");
  }
 };
 executorService.submit(runnable);

很多時候,我們從變量的名字就已經(jīng)知道了這個變量到底是什么類型的,那么上面的例子如果用var來改寫就可以像這樣:

var executorService= Executors.newSingleThreadExecutor();
var runnable=new Runnable() {
 @Override
 public 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 Declaration

var可以用在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是本地變量類型,它不能用在類變量的定義中,不能用在方法變量中,不能用在構造函數(shù)中,不能用在方法返回中,不能用在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 type
    return null;
  }*/
 
  /*public Integer parameterMethod( var input ){ //Not allowed in method parameters
    return null;
  }*/
}

注意,var在JVM無法推斷其類型或者可以有很多類型的情況下不能夠使用:

var ints = {1, 2, 3};
var lambda = a -> a;
var methodReference = String::concat;

上面例子中數(shù)組初始化,lambda表達式和方法引用都是不能用var的。

其他var的特點

var不是關鍵字,所以我們可以使用var來做變量名字:

var var = 2;  //Valid Declaration
     
int var = 2;  //Also valid Declaration

因為var是JDK10引入的概念,所以不是向下兼容的。不能夠用低版本的編譯器來編譯var。

var不會影響性能,因為var是在代碼編譯器進行的類型推斷,所以并不會影響到性能。

本文的例子[https://github.com/ddean2009/

learn-java-base-9-to-20](https://github.com/ddean2009/...

總結

var是JDK10中引入的一個新的特性,希望大家可以喜歡。

到此這篇關于JDK10新特性之本地變量類型var的文章就介紹到這了,更多相關JDK10新特性之本地變量類型var內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java Mybatis批量修改封裝詳解

    Java Mybatis批量修改封裝詳解

    這篇文章主要介紹了Mybatis批量修改封裝的相關內(nèi)容,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring 實現(xiàn)數(shù)據(jù)庫讀寫分離的示例

    Spring 實現(xiàn)數(shù)據(jù)庫讀寫分離的示例

    現(xiàn)在大型的電子商務系統(tǒng),在數(shù)據(jù)庫層面大都采用讀寫分離技術,我們通常的做法就是把查詢從主庫中抽取出來,采用多個從庫,使用負載均衡,減輕每個從庫的查詢壓力。
    2017-01-01
  • 詳解spring security四種實現(xiàn)方式

    詳解spring security四種實現(xiàn)方式

    這篇文章主要介紹了詳解spring security四種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java創(chuàng)建型設計模式之工廠方法模式深入詳解

    Java創(chuàng)建型設計模式之工廠方法模式深入詳解

    工廠方法模式(FACTORY METHOD)是一種常用的類創(chuàng)建型設計模式,此模式的核心精神是封裝類中變化的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達到解耦、復用和方便后期維護拓展的目的。它的核心結構有四個角色,分別是抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品
    2022-09-09
  • TransmittableThreadLocal通過javaAgent實現(xiàn)線程傳遞并支持ForkJoin

    TransmittableThreadLocal通過javaAgent實現(xiàn)線程傳遞并支持ForkJoin

    這篇文章主要介紹了TransmittableThreadLocal通過javaAgent實現(xiàn)線程傳遞并支持ForkJoin詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Java響應式編程之handle用法解析

    Java響應式編程之handle用法解析

    這篇文章主要介紹了Java響應式編程之handle用法解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Mybatis動態(tài)Sql標簽使用小結

    Mybatis動態(tài)Sql標簽使用小結

    本文主要介紹了Mybatis動態(tài)Sql標簽使用,常用的動態(tài)sql標簽包括?if、choose(when、otherwise)、trim(where、set)、foreach,下面就來介紹一下
    2024-04-04
  • Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別詳析

    Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別詳析

    這篇文章主要給大家介紹了關于Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別的相關資料,注解的作用是標識一個類為數(shù)據(jù)訪問對象,并由Spring框架進行實例化和管理,需要的朋友可以參考下
    2023-09-09
  • Java無界阻塞隊列DelayQueue詳細解析

    Java無界阻塞隊列DelayQueue詳細解析

    這篇文章主要介紹了Java無界阻塞隊列DelayQueue詳細解析,DelayQueue是一個支持時延獲取元素的無界阻塞隊列,隊列使用PriorityQueue來實現(xiàn),隊列中的元素必須實現(xiàn)Delayed接口,在創(chuàng)建元素時可以指定多久才能從隊列中獲取當前元素,需要的朋友可以參考下
    2023-12-12
  • java中使用zxing批量生成二維碼立牌

    java中使用zxing批量生成二維碼立牌

    本篇文章主要介紹了java中使用zxing批量生成二維碼立牌,非常具有實用價值,需要的朋友可以參考下。
    2016-12-12

最新評論

玉田县| 莎车县| 青冈县| 潼关县| 南皮县| 同江市| 徐闻县| 剑阁县| 英山县| 扬中市| 尉氏县| 临泉县| 清新县| 山西省| 抚州市| 黄浦区| 枣庄市| 开阳县| 北宁市| 子洲县| 泸定县| 崇阳县| 天津市| 深泽县| 改则县| 新余市| 杂多县| 都匀市| 嵊泗县| 乃东县| 界首市| 汉阴县| 江西省| 临潭县| 内江市| 东乡| 荆州市| 山东| 福安市| 黔西县| 保亭|