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

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

Java中非法前向引用的問題

Java中非法前向引用的問題

有只小跳蛙 2022-11-02 16:46:50
為什么我this在變量聲明中使用引用時,不會出現(xiàn)非法前向引用?this聲明有和沒有它有什么區(qū)別?以下示例由于非法前向引用而無法編譯:class FailsToCompile {    int a = b; //illegal forward reference    int b = 10;}通過限定編譯錯誤的使用b就this消失了。class Compiles {    int a = this.b; //that's ok    int b = 10;}
查看完整描述

1 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊

假設(shè)以下類


public class MyClass {

    int a = b;

    int b = 10;

}

JLS 8.3.3。在你的情況下:


使用實例變量,其聲明在使用后以文本形式出現(xiàn)有時會受到限制

- 使用是 C 的實例變量初始化程序或 C 的實例初始化程序中的簡單名稱


現(xiàn)在,使用該成員this允許您訪問已使用默認(rèn)值 ( a = 0, b = 0) 聲明但尚未完全初始化的實例。如果您檢查以下結(jié)果,這是可見的:


public class MyClass {

    int a = this.b;

    int b = 10;

}

你不會得到預(yù)期的價值:


new MyClass().a //0

new MyClass().b //10

我無法解釋為什么這是合法的,因為這永遠(yuǎn)不會給出正確的值。我們可以找到一些關(guān)于為什么存在限制的解釋:


上述限制旨在在編譯時捕獲循環(huán)或其他格式錯誤的初始化。


但是為什么允許this工作......

知道在實例初始化期間,會發(fā)生以下操作:

  1. 會員聲明

  2. 按順序執(zhí)行塊和字段初始化

  3. 構(gòu)造函數(shù)執(zhí)行

給出一些奇怪的行為:

public class MyClass {


    {

        b = 10;

    }

    int a = this.b;

    int b = 5;

    {

        b = 15;

    }


    public static void main(String[] args) {

        MyClass m = new MyClass();

        System.out.println(m.a); //10

        System.out.println(m.b); //15

    }

}

我會限制構(gòu)造函數(shù)中的初始化。


查看完整回答
反對 回復(fù) 2022-11-02
  • 1 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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