第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果在主方法和循環(huán)內(nèi)初始化中完成聲明,則在 Java 中無(wú)法從 For 循環(huán)外部訪問變量?

如果在主方法和循環(huán)內(nèi)初始化中完成聲明,則在 Java 中無(wú)法從 For 循環(huán)外部訪問變量?

慕桂英546537 2021-08-04 17:48:49
class Myclass {    public static void main(String[] args) {        int x; // Declared in main method        if (true) {            for (int i = 0; i < 5; i++) {                x = 5;// initialized inside loop            }        }        System.out.println(x);// accessing outside for loop    }}這給出了一個(gè)錯(cuò)誤:變量 x 可能沒有被初始化 System.out.println(x); ^ 1 錯(cuò)誤;但是,下面的代碼工作正常class Myclass {    public static void main(String[] args) {        int x; // Declared in main method        if (true) {            x = 5;// initialized in if block            for (int i = 0; i < 5; i++) {                // x=5;            }        }        System.out.println(x);// accessing outside if loop    }}在這兩個(gè)代碼中,唯一的區(qū)別是在第一種情況下,變量在“for 循環(huán)”中初始化,而在第二種情況下,它在“if 塊”中初始化。那么為什么它會(huì)有所作為。請(qǐng)向我解釋,因?yàn)槲覠o(wú)法找到真正的原因。
查看完整描述

3 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

問題是編譯器不知道當(dāng)你訪問它時(shí)x 會(huì)被初始化。那是因?yàn)榫幾g器不會(huì)檢查循環(huán)體是否真的會(huì)被執(zhí)行(在極少數(shù)情況下,即使是這樣一個(gè)簡(jiǎn)單的循環(huán)也可能不會(huì)運(yùn)行)。


如果條件不總是正確的,那么你的 if-block 也是如此,即如果你使用這樣的布爾變量:


int x;


boolean cond = true;

if( cond ) {

  x = 5;

}


//The compiler will complain here as well, as it is not guaranteed that "x = 5" will run

System.out.println(x);

你作為一個(gè)人會(huì)說(shuō)“但cond被初始化true并且永遠(yuǎn)不會(huì)改變”但編譯器不確定(例如,因?yàn)榭赡艿木€程問題),因此它會(huì)抱怨。如果你創(chuàng)建cond一個(gè) final 變量,那么編譯器會(huì)知道cond在初始化后不允許更改,因此編譯器可以內(nèi)聯(lián)代碼以if(true)再次有效地?fù)碛小?/p>


查看完整回答
反對(duì) 回復(fù) 2021-08-04
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

如果您將 if 塊中的條件從trueto更改為,false您將得到與variable 'x' might not have been initialized. 當(dāng)你這樣做時(shí)if(true),編譯器可以理解 if 塊中的代碼將始終運(yùn)行,因此變量 x 將始終被初始化。


但是當(dāng)您在 for 循環(huán)中初始化變量時(shí),可能會(huì)發(fā)生 for 循環(huán)永遠(yuǎn)不會(huì)運(yùn)行并且變量未初始化的情況。


 public static void main(String[] args) {


      int x; // Declared in main method

         if(false)

            {

                x=5; //compile error

                for(int i=0;i<5;i++)

                {

                    //x=5 initialized inside loop

                }


            }

            System.out.println(x);

        }

為避免這種情況,將變量初始化為 int x = 0;




查看完整回答
反對(duì) 回復(fù) 2021-08-04
?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

它仍然可以訪問,但程序可能永遠(yuǎn)不會(huì)訪問 for 塊。由于編譯器不滿足 for 循環(huán)之外的任何其他 var 初始化,它會(huì)給你一個(gè)錯(cuò)誤。為了編譯它,您必須使用默認(rèn)值初始化變量:


class Myclass {

    public static void main (String[] args) {


        int x = 0; // Declared in main method and init with a default value.


        if(true) {

            for(int i=0;i<5;i++) {

                x=5;// Reinitialized inside loop

            }

        }

        System.out.println(x); // No problems here.

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-08-04
  • 3 回答
  • 0 關(guān)注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)