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

資訊專欄INFORMATION COLUMN

Java源碼中有意思的代碼片段

Scorpion / 307人閱讀

摘要:無(wú)聊時(shí),看了一下源碼,發(fā)現(xiàn)一個(gè)有趣的代碼片段。下面是我的代碼運(yùn)行結(jié)果程序不沒(méi)有報(bào)錯(cuò),可以正常運(yùn)行,運(yùn)行的結(jié)果和我們使用標(biāo)準(zhǔn)的循環(huán)一樣。

無(wú)聊時(shí),看了一下java.util.Collections源碼,發(fā)現(xiàn)一個(gè)有趣的代碼片段。下面這段代碼是從java.util.Collections中Copy出來(lái)的,大看一下有趣在哪里??

public static int indexOfSubList(List source, List target) {
    int sourceSize = source.size();
    int targetSize = target.size();
    int maxCandidate = sourceSize - targetSize;

    if (sourceSize < INDEXOFSUBLIST_THRESHOLD ||
        (source instanceof RandomAccess&&target instanceof RandomAccess)) {
    nextCand:
        for (int candidate = 0; candidate <= maxCandidate; candidate++) {
            for (int i=0, j=candidate; i si = source.listIterator();
    nextCand:
        for (int candidate = 0; candidate <= maxCandidate; candidate++) {
            ListIterator ti = target.listIterator();
            for (int i=0; i
上面有個(gè)語(yǔ)法這樣的:
nextCand:
        for (int candidate = 0; candidate <= maxCandidate; candidate++) {
            ListIterator ti = target.listIterator();
            for (int i=0; i

這樣的語(yǔ)法很少見(jiàn),可以說(shuō)幾乎在Java根本沒(méi)有,一開(kāi)始我還以是反編譯時(shí)編譯出錯(cuò)了,出現(xiàn)了語(yǔ)法錯(cuò)誤,但是我好奇的試了一下這個(gè)語(yǔ)法,真是奇了,竟然可以通過(guò)編譯,程序也能正常運(yùn)行。

下面是我的代碼:
public class Test {
    
    public static void main(String[] args) {
        
        isNext : for (int i = 0; i < 5; i++) {
                if ((i % 2) != 0) {
                    continue isNext;
                }
                System.out.println("i ==> " + i);
            }
    }
}
運(yùn)行結(jié)果:

程序不沒(méi)有報(bào)錯(cuò),可以正常運(yùn)行,運(yùn)行的結(jié)果和我們使用標(biāo)準(zhǔn)的 for 循環(huán)一樣。從上面的運(yùn)行結(jié)果可以看出 continue isNext 的作用和 continue 一樣,都是跳出當(dāng)前循環(huán)。

說(shuō)道這里,我們分析一樣一下這個(gè)語(yǔ)言的使用場(chǎng)景,先看一下語(yǔ)法。

identifies :  
    code segment {
        break/continue identifies;
    }

identifies 是自定義的,定義的規(guī)則個(gè)Java的參數(shù)定義一樣,如果冒號(hào)后面跟的的循環(huán),可以使用 break identifies 跳出整個(gè)循環(huán),或 continue identifies 退出當(dāng)前循環(huán)。其實(shí)最上面的源碼中,就有注解: // Element mismatch, try next cand(元素不匹配,嘗試下一個(gè)元素),當(dāng)然,我還發(fā)現(xiàn)另一種用法,那就是,冒號(hào)后面跟著方法,也可以執(zhí)行方法。

eg: for(;;;) {continue identifies}
public static void isNext1() {
    // for(;;;) {continue identifies}
    isNext1 : for (int i = 0; i < 5; i++) {
        if ((i % 2) != 0) {
            continue isNext1;
        }
        System.out.println("i ==> " + i);
    }
}

eg: do...while() {break identifies}
public static void isNext2() {
    // do...while() {break identifies}
    isNext2 : do {
        System.err.println("while() {break identifies}");
        if (true) {
            break isNext2;
        }
    } while (true);
}

eg: do...while() {break identifies}
public static void isNext3() {
    // while() {break identifies}    
    isNext3 : while (true) {
        System.err.println("do...while() {break identifies}");
        if (true) {
            break isNext3;
        }
    }
}

eg: switch() {break identifies}
public static void isNext4() {
    // switch() {break identifies}
    isNext4 : switch (1) {
        case 1:
            System.err.println("switch() {break identifies}");
            break isNext4;
        default:
            break isNext4;
    }
}

eg: method()
public static void isNext5() {
    isNext : test(11);
}

public static void test(int arg) {
    System.err.println("method() ==> " + arg);
}

總結(jié)

這種語(yǔ)法就是用來(lái)裝逼的,沒(méi)有什么軟用。O(∩_∩)O哈哈哈~

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

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

相關(guān)文章

  • java源碼一帶一路系列】之LinkedHashMap.afterNodeAccess()

    摘要:如今行至于此,當(dāng)觀賞一方。由于所返回的無(wú)執(zhí)行意義。源碼閱讀總體門檻相對(duì)而言比,畢竟大多數(shù)底層都由實(shí)現(xiàn)了。比心可通過(guò)這篇文章理解創(chuàng)建一個(gè)實(shí)例過(guò)程圖工作原理往期線路回顧源碼一帶一路系列之源碼一帶一路系列之源碼一帶一路系列之 本文以jdk1.8中LinkedHashMap.afterNodeAccess()方法為切入點(diǎn),分析其中難理解、有價(jià)值的源碼片段(類似源碼查看是ctrl+鼠標(biāo)左鍵的過(guò)程...

    levy9527 評(píng)論0 收藏0
  • 分享代碼片段:如何對(duì)自動(dòng)生成java代碼做自動(dòng)格式化,以達(dá)到接近手寫效果

    摘要:原文鏈接如題,有的時(shí)候,我們會(huì)采用自動(dòng)生成代碼的方式來(lái)完成一些任務(wù),比如根據(jù)業(yè)務(wù)數(shù)據(jù)自動(dòng)生成調(diào)用的供用戶下載使用這樣自動(dòng)生成的代碼,如果未經(jīng)格式化處理,基本上是不可讀的正好,我們常用的,快捷鍵就能自動(dòng)格式化代碼那么,下面這段代碼,就是將的這 原文鏈接:https://gist.github.com/pfmiles/653c8b59e795698c867d 如題,有的時(shí)候,我們會(huì)采用自...

    lykops 評(píng)論0 收藏0
  • Java進(jìn)階1 —— 對(duì)象創(chuàng)建與銷毀

    摘要:構(gòu)造方法是在對(duì)象實(shí)例初始化過(guò)程中具有舉足輕重的地位,并且提供了多種方式來(lái)定義構(gòu)造方法。在中創(chuàng)建對(duì)象的開(kāi)銷是相當(dāng)?shù)偷?,并且速度很快。?duì)象終結(jié)器前面我們講述的都是構(gòu)造方法和對(duì)象初始化相關(guān)的主題,但還未提及他們的反面對(duì)象銷毀。 原文鏈接:http://www.javacodegeeks.com/2015/09/how-to-create-and-destroy-objects.html 本文...

    nemo 評(píng)論0 收藏0
  • Backbone源碼解讀(三)

    摘要:事件關(guān)于路由觸發(fā)事件是通過(guò)兩個(gè)函數(shù)來(lái)完成的,它們分別是和前者會(huì)檢測(cè)路由是否發(fā)生了改變,如果改變了就會(huì)觸發(fā)函數(shù)并調(diào)用函數(shù),而后者會(huì)通過(guò)路由片段來(lái)找到相關(guān)的事件函數(shù)來(lái)觸發(fā)。 注意:強(qiáng)烈建議一邊閱讀源碼一邊閱讀本文。 終于到了backbone源碼解讀的最后一篇,這一篇和前面幾篇時(shí)間上有一定的間隔(因?yàn)橐貙W(xué)校有一堆亂七八糟的事...)。在這一篇里面會(huì)講解Bakcbone的sync & rou...

    feng409 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<