簡體   English   中英

我可以用另一個final定義一個final變量嗎?

[英]Can I define a final variable with another final?

這更多是一個假設性的問題,但是如果我有一些都稱為int的final A和另一個final B,我將無法做到這一點:

private final int A = B/2, B = (some kind of other derived number);

我只是想知道為什么。 任何幫助都是極好的。 NetBeans對此彈出了一個錯誤,我只想知道為什么會出現問題。

PS-彈出的錯誤表示“非法前向參考”。

在聲明變量B之前,您正在訪問它。 這就是"illegal forward reference".的原因"illegal forward reference".

A之前定義變量B

private final int B = (some kind of other derived number), A = B/2;

假設您是編譯器:

private final int還可以。 用戶先生想要一個“ const”整數

A變量稱為A

= ...價值來了

B/2嗯? 地獄是什么? 關於B.用戶的問題,沒人告訴我。 我不在這里...

現有答案無法回答基本問題:

為什么我可以使用稍后在源文件中定義的方法,但是對變量使用相同的方法會導致前向引用錯誤消息嗎?

答案可以在JLS中找到,更具體地說,是JLS $ 12.4.1

靜態初始值設定項和類變量初始值設定項以文本順序執行 ,並且不能引用在類中聲明的類變量,這些類的聲明在使用后以文本形式出現,即使這些類變量在范圍內(第8.3.2.3節 )。 此限制旨在在編譯時檢測大多數循環或格式錯誤的初始化。

在這里回答了這個問題。 基本上,這意味着您正在嘗試使用未初始化的變量。

首先初始化B,然后使用它初始化A

private final int B = ?, A = B/2;

Java中的非法前向引用

您的代碼不會失敗,因為A和B是最終的。 之所以失敗,是因為尚未聲明/初始化B。 如果先聲明,則可以使用它們。

例如,

private final int C = 5;
private final int B = C/3;
private final int A = B/2;

這很好,因為首先聲明了B :)

“最終”僅表示您無法更改變量。 因此,像這樣將無法正常工作

private final static int C = 5;
private final static int B = C/3;
private final static int A = B/2;

public static void main (String[] args) {
    A = 5;
}

因為現在我們正在嘗試修改“最終”的A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM