亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果在主方法和循環內初始化中完成聲明,則在 Java 中無法從 For 循環外部訪問變量?

如果在主方法和循環內初始化中完成聲明,則在 Java 中無法從 For 循環外部訪問變量?

慕桂英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    }}這給出了一個錯誤:變量 x 可能沒有被初始化 System.out.println(x); ^ 1 錯誤;但是,下面的代碼工作正常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    }}在這兩個代碼中,唯一的區別是在第一種情況下,變量在“for 循環”中初始化,而在第二種情況下,它在“if 塊”中初始化。那么為什么它會有所作為。請向我解釋,因為我無法找到真正的原因。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

問題是編譯器不知道當你訪問它時x 會被初始化。那是因為編譯器不會檢查循環體是否真的會被執行(在極少數情況下,即使是這樣一個簡單的循環也可能不會運行)。


如果條件不總是正確的,那么你的 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);

你作為一個人會說“但cond被初始化true并且永遠不會改變”但編譯器不確定(例如,因為可能的線程問題),因此它會抱怨。如果你創建cond一個 final 變量,那么編譯器會知道cond在初始化后不允許更改,因此編譯器可以內聯代碼以if(true)再次有效地擁有。


查看完整回答
反對 回復 2021-08-04
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

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


但是當您在 for 循環中初始化變量時,可能會發生 for 循環永遠不會運行并且變量未初始化的情況。


 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;




查看完整回答
反對 回復 2021-08-04
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

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


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.

    }

}


查看完整回答
反對 回復 2021-08-04
  • 3 回答
  • 0 關注
  • 289 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號