成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java 10 實戰(zhàn)第 1 篇:局部變量類型推斷

HollisChuang / 3201人閱讀

摘要:就等于局部變量類型推斷使用示例既然叫局部變量類型推斷,以只能用在局部變量中,下面給出更多使用示例。,本次局部變量類型推斷實戰(zhàn)文章就到這里了,后續(xù)帶來更多的的實戰(zhàn)方面的文章。

現(xiàn)在 Java 9 被遺棄了直接升級到了 Java 10,之前也發(fā)過 Java 10 新特性的文章,現(xiàn)在是開始實戰(zhàn) Java 10 的時候了。

今天要實戰(zhàn)的是 Java 10 中最重要的特性:局部變量類型推斷,大家都知道是 var 關(guān)鍵字,但具體怎么使用,及要注意什么要點呢?

我們通過幾個例子來講解局部變量類型推斷這個新特性!

什么是局部變量類型推斷
var javastack = "javastack";
System.out.println(javastack);

大家看出來了,局部變量類型推斷就是左邊的類型直接使用 var 定義,而不用寫具體的類型,編譯器能根據(jù)右邊的表達式自動推斷類型,如上面的 String 。

var javastack = "javastack";

就等于:

String javastack = "javastack";
局部變量類型推斷使用示例

既然叫局部變量類型推斷,以只能用在局部變量中,下面給出更多使用示例。

1、字面量定義局部變量

private static void testVar() {
    var javastack = "javastack";
    System.out.println(javastack);
}

2、接收方法返回值定義局部變量

private static void testMethod() {
    var javastack = getJavastack();
    System.out.println(javastack);
}

public static String getJavastack() {
    return "javastack";
}

3、循環(huán)中定義局部變量

private static void testLoop() {
    for (var i = 0; i < 3; i++) {
        for (var m = 10; m < 15; m++) {
            System.out.println(i + m);
        }
    }
}

4、泛型結(jié)合局部變量

private static void testGeneric() {
    // 表達式1
    List list1 = new ArrayList<>();
    list1.add("javastack");

    // 表達式2
    var list2 = new ArrayList<>();
    list2.add(2018);

    // 表達式3
    var list3 = new ArrayList();
    list3.add("javastack");
}

表達式1后面 <> 里面 jdk 1.7+開始是不用帶具體類型的,在接口中指明就行了。

表達式2中如果使用 var 的話,<> 里面默認(rèn)會是 Object 的,所以可以添加任意類型。

表達式3中在 <> 強制使用了 String 來指定泛型。

局部變量類型推斷不能用在以下場景

1、類成員變量類型

// 編譯報錯
private var javastack = "Java技術(shù)棧";

2、方法返回類型

/**
 * 編譯報錯
 * @return
 */
public static var getJavastack(){
     return "Java技術(shù)棧";
}

3、Lambda 表達式

private static void testLambda() {
    Runnable runnable = () -> System.out.println("javastack");

    // 編譯報錯
    // var runnable = () -> System.out.println("javastack");
}

以上 3 種場景是肯定不能使用 var 的,其他場合有待驗證。

局部變量類型推斷優(yōu)缺點

優(yōu)點:簡化代碼

CopyOnWriteArrayList list1 = new CopyOnWriteArrayList();
ConcurrentModificationException cme1 = new ConcurrentModificationException();
DefaultServiceUnavailableRetryStrategy strategy1 = new
        DefaultServiceUnavailableRetryStrategy();

var list2 = new CopyOnWriteArrayList<>();
var cme2 = new ConcurrentModificationException();
var strategy2 = new DefaultServiceUnavailableRetryStrategy();

從以上代碼可以看出,很長的定義類型會顯得代碼很冗長,使用 var 大大簡化了代碼編寫,同時類型統(tǒng)一顯得代碼很對齊。

缺點:掩蓋類型

var token = new JsonParserDelegate(parser).currentToken();

看以上代碼,不進去看返回結(jié)果類型,誰知道返回的類型是什么?所以這種情況最好別使用 var,而使用具體的抽象類、接口或者實例類型。

var關(guān)鍵字原理

var其實就是 Java 10 增加的一種語法糖而已,在編譯期間會自動推斷實際類型,其編譯后的字節(jié)碼和實際類型一致,如以下例子所示。

private static void testByteCode() {
    String javastack1 = "javastack";
    var javastack2 = "javastack";
}

編譯成字節(jié)碼后:

private static testByteCode()V
L0
LINENUMBER 22 L0
LDC "javastack"
ASTORE 0
L1
LINENUMBER 23 L1
LDC "javastack"
ASTORE 1
L2
LINENUMBER 24 L2
RETURN
L3
LOCALVARIABLE javastack1 Ljava/lang/String; L1 L3 0
LOCALVARIABLE javastack2 Ljava/lang/String; L2 L3 1
MAXSTACK = 1
MAXLOCALS = 2

可以看出 javastack1javastack2 都是虛擬機所認(rèn)識的的本地變量類型:java.lang.String,虛擬機并不認(rèn)識 var, 所以 var 并不神奇。

OK,本次 Java 10 局部變量類型推斷實戰(zhàn)文章就到這里了,后續(xù)帶來更多的 Java 10 的實戰(zhàn)方面的文章。

推薦:Spring Boot & Cloud 最強技術(shù)教程

掃描關(guān)注我們的微信公眾號,干貨每天更新。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71130.html

相關(guān)文章

  • Java 11 正式發(fā)布,這 8 個逆天新特性教你寫出更牛逼的代碼

    摘要:美國時間月日,正式發(fā)布了,這是據(jù)以后支持的首個長期版本。加強是中的新特性,開始對增加了以下個新方法。結(jié)束語現(xiàn)在許多人還在使用或者,不過在年初就會結(jié)束免費更新。 美國時間 09 月 25 日,Oralce 正式發(fā)布了 Java 11,這是據(jù) Java 8 以后支持的首個長期版本。 為什么說是長期版本,看下面的官方發(fā)布的支持路線圖表。 showImg(https://segmentfaul...

    AlienZHOU 評論0 收藏0
  • Java8實戰(zhàn)》-三章讀書筆記(Lambda表達式-02)

    摘要:上下文比如,接受它傳遞的方法的參數(shù),或者接受它的值得局部變量中表達式需要類型稱為目標(biāo)類型。但局部變量必須顯示的聲明,或?qū)嶋H上就算。換句話說,表達式只能捕獲指派給它們的局部變量一次。注捕獲實例變量可以被看作捕獲最終局部變量。 由于第三章的內(nèi)容比較多,而且為了讓大家更好的了解Lambda表達式的使用,也寫了一些相關(guān)的實例,可以在Github或者碼云上拉取讀書筆記的代碼進行參考。 類型檢查、...

    iflove 評論0 收藏0
  • 樂字節(jié)-Java8核心特性實戰(zhàn)之Lambda表達式

    摘要:使用表達式,使得應(yīng)用變得簡潔而緊湊。很多語言等從設(shè)計之初就支持表達式。表達式的參數(shù)與函數(shù)式接口內(nèi)方法的參數(shù),返回值類型相互對應(yīng)。更多教程和資料請上騰訊課堂樂字節(jié) showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表達式,允許開發(fā)者將函數(shù)當(dāng)成參數(shù)傳遞給某個方法,或者把代碼本身當(dāng)作數(shù)據(jù)進行處理。...

    Karuru 評論0 收藏0
  • Java 10 新特性解密,引入類型推斷機制,2018 年 3 月 20 日發(fā)布

    摘要:目標(biāo)發(fā)布目前有兩個主要功能針對局部變量類型推斷這將刪除大部分對象實例化所需的冗長的包含手動類型信息整合源樹的庫即不同的庫將被合并成一個單一的存儲庫。特別是,承諾為局部變量實例化引入類型推斷機制,并將現(xiàn)有的存儲庫合并到一個存儲庫中。 JDK 10 何時發(fā)布? JDK 10 是 Java 10 標(biāo)準(zhǔn)版的部分實現(xiàn),將于 2018 年 3 月 20 日發(fā)布,改進的關(guān)鍵點包括一個本地類型推斷、一...

    caspar 評論0 收藏0
  • Java 1010個新特性,將徹底改變你寫代碼的方式!

    摘要:的新特性說了這么多,看都會有哪些特性來改變我們寫代碼的方式呢局部變量類型推斷局部變量類型推斷可以說是中最值得注意的特性,這是語言開發(fā)人員為了簡化應(yīng)用程序的編寫而采取的又一步,如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才發(fā)布幾個月,很多玩意都沒整明白,現(xiàn)在Java 10又快要來了...

    ityouknow 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<