なぜ、その宣言の前にJavaで利用できる方法はありますか?

金;

私はのコンセプトを通過されたhoisting任意の実行が行われ、これは関数が実際の宣言部分の前に利用可能である理由である前に、すべての関数と変数の宣言が掲揚されているJavaScriptのインチ

私はそれがJavaで働いていた正確にどのように思っていました。

次のコードを考えてみます。

package declarationOrder;

public class Main {

    int num = init();

    int init() {
        return 5;
    }
}

どのように正確に方法でinit()到達したその宣言部分の前にコールのために利用可能では?

他の例を考えてみます。

package declarationOrder;

public class Main {

    int num1 = num2; // compiler error
    int num2 = 5;
}

それはどのように変数の宣言の順序は、ここで役割を果たしていることがありますか?

なぜ、どのように方法が異なって扱われますか?

YCF_L:

コンパイラはJavaでクラス内の内容(属性、メソッド、静的なブロックを、...)をロードするために従います。

あなたのケースでは、この方法は、その後、クラス属性をロードされている最初のものです。

それは、初期化のためにロードされる属性についてはので、あなたは第二の例ではエラーが出るnum2言及される前に、num1あなたは順序を逆ならば、それは罰金を動作します:

int num2 = 5;
int num1 = num2;

詳細については見とり12.4.2を。詳細な初期化手順

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201806&siteId=1