[英]Private Final vs Final Private
在互聯網上搜索了一些,但找不到簡單的答案。 我的問題集是在 Android 框架中使用 Java,但我相信這也只是標准的 Java 行為。 我了解final
和private
的定義,它們都用於變量訪問和修飾符。 當說明要求我將變量初始化為final private
變量時,我正在學習一些代碼和教程。 以前沒有見過這個,我改為創建了一個private final
變量。 后來,代碼要求我在構造函數中初始化該變量,這顯然對private final
變量失敗,因為它是不可變的。 但是,當我將變量更改為final private
時它並沒有失敗......這讓我感興趣。 有誰知道為什么會這樣?
感謝您的回復!
后來,代碼要求我在構造函數中初始化該變量,這顯然對私有 final 變量失敗,因為它是不可變的。
標記為final
成員可以在構造函數中初始化。 您可以創建一個參數化構造函數,該構造函數接受來自類外部的值,也可以直接使用聲明來初始化這些成員。 如果您稍后選擇並且數據類型是原始數據,則將這些成員標記為static
因為它們對於類的所有實例都將保持不變。
但是,當我將變量更改為最終私有時它並沒有失敗......這讓我感興趣
這是不可能的,因為private final
和final private
幾乎是一回事,不會有任何區別。 然而,前者被認為是良好的做法。 您可以按照此SO了解有關訂購的更多詳細信息。
舉個例子,這里有一些可以使用final
和不可以使用的情況。 private final
和final private
之間沒有區別。 添加@Sagar 所說的內容,您可以內聯或在構造函數中初始化變量,但不能同時初始化。
public class TestClass {
private final String i1;
final private String i2;
private final String i3 = "test"; // ok
private final String i4; // not ok, never initialized
TestClass() {
i1 = "test1"; // ok
i2 = "test2"; // ok
i3 = "test3"; // not ok, overrides already set value
}
void mod() {
i1 = "test0"; // not ok, can't edit final i1
}
}
private final
和final private
沒有區別。 對於訪問修飾符,順序無關緊要。 所以他們都會有類似的行為。
嘗試這個:
public class Test {
private final String privateFinal;
final private String finalPrivate;
public Test() {
privateFinal = "Private Final";
finalPrivate = "Final Private";
}
}
上面的代碼編譯得很好。
它們是一樣的。 私人決賽 > 最終私人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.