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

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

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

簡(jiǎn)介

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

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

為什么我們需要var

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

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

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

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

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

再看一個(gè)線程池的例子:

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

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

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

代碼更加簡(jiǎn)潔,程序員寫起來也更加方便。

如果上面的例子還不能夠提起你使用var的興趣,那么下面的例子你一定很樂意使用var了。

假如我們有一個(gè)非常非常長(zhǎng)的類名:

ItIsAVeryLongNameJavaClass itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

寫起來是不是超級(jí)麻煩,代碼看起也非常冗余,這時(shí)候我們就可以將其簡(jiǎn)化為:

var itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

var使用在什么地方

首先var代表的是本地變量,所以,只有本地變量才能夠使用var。

其次var在定義的時(shí)候就必須被初始化:

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不能用在什么地方

因?yàn)関ar是本地變量類型,它不能用在類變量的定義中,不能用在方法變量中,不能用在構(gòu)造函數(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表達(dá)式和方法引用都是不能用var的。

其他var的特點(diǎn)

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

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

因?yàn)関ar是JDK10引入的概念,所以不是向下兼容的。不能夠用低版本的編譯器來編譯var。

var不會(huì)影響性能,因?yàn)関ar是在代碼編譯器進(jìn)行的類型推斷,所以并不會(huì)影響到性能。

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

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

總結(jié)

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

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

相關(guān)文章

  • Java Mybatis批量修改封裝詳解

    Java Mybatis批量修改封裝詳解

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

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

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

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

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

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

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

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

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

    Java響應(yīng)式編程之handle用法解析

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

    Mybatis動(dòng)態(tài)Sql標(biāo)簽使用小結(jié)

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

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

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

    Java無界阻塞隊(duì)列DelayQueue詳細(xì)解析

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

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

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

最新評(píng)論

辛集市| 汽车| 双辽市| 铁力市| 平原县| 榕江县| 南京市| 乐清市| 怀化市| 越西县| 鄂托克旗| 腾冲县| 嘉鱼县| 沙坪坝区| 曲沃县| 桑植县| 高尔夫| 秦皇岛市| 磐石市| 长丰县| 张家港市| 贵州省| 当雄县| 堆龙德庆县| 武川县| 阳山县| 海口市| 庆云县| 泌阳县| 长子县| 温宿县| 绵阳市| 新昌县| 铜鼓县| 凤翔县| 上犹县| 三明市| 富源县| 盐边县| 合阳县| 平山县|