java變量范圍,變量可能尚未初始化

我在學習java,我知道java變量的作用域,比如類級、方法級、塊級。但是,當我嘗試實踐變量范圍時,我在代碼中遇到了錯誤。我的代碼如下:

public class HelloWorld {
    public static void main(String[] args) {
        int c;
        for (int i=0; i <5; i++) {
            System.out.println(i);
            c = 100;
        }
        System.out.println(c);
    }
}

當我運行此代碼時,它會顯示錯誤:the c variable might not have been initialized,但當我將代碼更改為以下內容時:

public class HelloWorld {
    public static void main(String[] args) {
        int c=0;
        for (int i=0; i <5; i++) {
            System.out.println(i);
            c = 100;
        }
        System.out.println(c);
    }
}

代碼將打印100

我應該如何理解代碼中的作用域?

? 最佳回答:

在Java中,局部變量不是用默認值初始化的(不像,例如類的字段)。從語言規范(§4.12.5)可以看出:

在使用局部變量(§14.4,§14.14)之前,必須通過初始化(§14.4)或賦值(§15.26)顯式地給定一個值,這種方法可以使用確定賦值規則(§16(確定性賦值))進行驗證。

因為它是在Java語言規范上顯式設置的,所以編譯器不會(也不應該)推斷變量c將始終在循環內更新:

public class HelloWorld {
    public static void main(String[] args) {
        int c;
        for (int i=0; i <5; i++) {
            System.out.println(i);
            c = 100;
        }
        System.out.println(c);
    }
}

編譯器嚴格執行該標準,并通知您違反其中一條規則時出現錯誤:

"variable c might not have been initialized"

因此,即使您的代碼可以被正式證明是有效的,編譯器也不需要嘗試分析應用程序的邏輯,局部變量初始化規則也不依賴于此。編譯器檢查變量c是否根據局部變量初始化規則初始化,并相應地檢查reacts(例如,顯示int c;情況下的編譯錯誤)。

主站蜘蛛池模板: 无码少妇一区二区浪潮免费| 国产在线不卡一区二区三区| 久久免费区一区二区三波多野| 无码人妻精一区二区三区| 中文字幕一区二区三区视频在线| 国精产品一区一区三区MBA下载 | 一本AV高清一区二区三区| 国产在线精品一区在线观看| 亚洲av综合av一区二区三区| 日韩精品一区二区亚洲AV观看| 一区二区三区影院| 无码精品人妻一区二区三区AV| 怡红院美国分院一区二区 | 无码人妻AⅤ一区二区三区| 一区二区三区免费视频网站| 天天躁日日躁狠狠躁一区| 无码av中文一区二区三区桃花岛 | 国产精品区AV一区二区| 国产伦精品一区二区三区免.费| 国产精品无码一区二区在线| 3d动漫精品一区视频在线观看| 亚洲AV福利天堂一区二区三| 日本一区二区不卡视频| 国产内射999视频一区| 国产一区在线视频| 国产av成人一区二区三区| 亚洲日韩激情无码一区| 中文字幕VA一区二区三区 | 一区二区三区四区在线视频| 精品国产区一区二区三区在线观看| 91国偷自产一区二区三区| 国产微拍精品一区二区| 日本一区二区三区在线看| 国产一区二区三区亚洲综合| 日韩精品一区二三区中文| 国产精品毛片一区二区| 无码人妻精品一区二区三区夜夜嗨| 亚洲一区二区三区电影| 亚洲一区中文字幕在线电影网| 日韩一区二区a片免费观看| 国产a久久精品一区二区三区|