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

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

Java中非法前向引用的問題

Java中非法前向引用的問題

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

1 回答

?
藍(lán)山帝景

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

假設(shè)以下類


public class MyClass {

    int a = b;

    int b = 10;

}

JLS 8.3.3。在你的情況下:


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

- 使用是 C 的實(shí)例變量初始化程序或 C 的實(shí)例初始化程序中的簡(jiǎn)單名稱


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


public class MyClass {

    int a = this.b;

    int b = 10;

}

你不會(huì)得到預(yù)期的價(jià)值:


new MyClass().a //0

new MyClass().b //10

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


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


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

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

  1. 會(huì)員聲明

  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

    }

}

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


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

添加回答

舉報(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)