簡體   English   中英

私有靜態最終字段

[英]private static final fields

我只想澄清一下。 有什么區別 -

private static int STUDENT_AGE = 18; 

private static final int STUDENT_AGE = 18; 

在球場內?

Jon Skeet解釋說“根本與某個特定實例無關”,好吧我想我明白了。 那么最終在這種情況下究竟做了什么呢?

下面的代碼不起作用是因為學生年齡被指定為靜態最終? 這是否意味着默認年齡根本無法覆蓋? 那么是否可以創建指定非默認年齡的構造函數?

private String myName;
private String myAddress;
private int myYearEnrolled;
private String myGender; 
private static final int STUDENT_AGE = 18; 

public Student(String name, String address, int year, String gender) {
    myName = name;
    myAddress = address;
    myYearEnrolled = year;
    myGender = gender; 
}

   public Student(int age)
{
     STUDENT_AGE = age; 
}

static表示“根本不與特定實例相關” - final表示初始化后無法更改此值,並且必須初始化此值。

finalstatic的組合使您能夠創建常量。 這不再以公共方式推薦(完全可以用於私人環境中的魔術數字),因為它不是類型安全的。 使用Enum post java 1.5或者按照Joshua Blochs Effective Java和這個問題的建議創建自己的類型安全enum pre java 1.5。

備注:大約一年后閱讀本文,我想我需要強調一般public static final字段沒有任何問題,只是命名常量應該用enums或其他類型安全替代實現。

一旦變量被聲明為final ,其值就不能在以后更改。 在您提供的代碼示例中,聲明了一個常量,用於定義特定活動的學生年齡。 這可能意味着將存在某種活動的條件,即將學生的年齡與此常數進行比較。 如果學生年齡大於18歲,那么只允許他繼續學習。

 private static final int STUDENT_AGE = 18;

這是不斷的聲明。 您無法更改該值。

private static int STUDENT_AGE = 18;

這是一個靜態聲明但不是常數。 值可以更改。

final變量只能初始化一次。

字段上的final修飾符表示初始化后無法修改字段的值。

因此,您無法設置STUDENT_AGE = age; 除非它不是最終的。

簡單來說,修飾語final意味着它的FINAL。 一旦定義,您就無法更改該值。

根據您的要求,如果您想提供默認年齡,如果沒有提供任何內容,則只需刪除變量STUDENT_AGE的最終修飾符。 就是@Quoi所說的

final static變量只能初始化一次,但不一定要在聲明時初始化。但是一旦初始化,它的值就不能改變了。所以,你可以在聲明時或靜態時初始化你的final static變量塊。

private static final int STUDENT_AGE = 20;

要么

private static final int STUDENT_AGE;
static {
      STUDENT_AGE = 20;
}

現在, static變量(也稱為class變量)並不特定於任何實例。 它在該類的所有實例之間共享。

看到這種方式,當第一次加載類時, Static變量被加載到內存中。這就是所有實例共享它的原因。 因此,任何實例的靜態變量的任何更改都將反映到該類的所有其他實例(是的,您正確讀取..您也可以通過類的實例變量訪問static變量..但編譯器最終擔心實際僅限課程)

暫無
暫無

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

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