簡體   English   中英

Java-靜態和最終變量

[英]Java - Static and Final variables

我知道這是行不通的,但這只是一個例子,所以我可以理解為什么它行不通。

public class MyClass {

    final static JButton b;

 public void myMethod() {
   b = new JButton("Hello!");
 }
 }

1)為什么final static JButton b;出錯final static JButton b; 線? 當我刪除static關鍵字時,為什么此錯誤消失了?

2)有或沒有static關鍵字, b = new JButton("Hello!"); 我想知道為什么會這樣嗎? 我認為在方法中實例化最終變量是可以的。

當您將靜態字段聲明為final ,必須在靜態初始化程序塊中或使用初始化程序表達式對其進行靜態初始化。 您不能在構造函數中對其進行初始化。

當您將非靜態字段聲明為final ,必須在每個構造函數中,使用初始化程序表達式或實例初始化程序塊中對其進行初始化。

final賦值只能立即或在構造函數中進行。 因此,僅允許以下內容。

class A {
    static final B b = new B();
    static final C c;
    static { // Static initializer block.
         c = new C();
    }
    final B b2 = new B();
    final C c2;
    { // Initializer block.
         c2 = new C();
    }
    final D d2;
    A() {
        d2 = new D();
    }
}

由於該字段是static final因此需要使用類本身進行初始化,因此編譯器要求您提供默認值以外的其他值。 您可以提供默認的初始化程序,也可以在初始化塊中提供值:

要么

public class MyClass {
  final static JButton b = new JButton("Hello!");
}

要么

public class MyClass {
  final static JButton b;

  static{
      b = new JButton("Hello!");
  }
}

是有效的。

到調用yourMethod已經為時已晚,因為期望那時您的類已被初始化,並且您希望所涉及的字段也已被初始化。

有些人應該重讀靜態和最終的真實含義。

對於其類的每個實例, 靜態變量都是全局變量 如果您有一個Person類,其中包含“ int static age = 0”,則您說age ++; 在構造函數中,age在每種情況下都具有相同的值! 意味着在每個人實例中3x new Person()預期年齡為3歲! michael.age == 3和susan.age == 3 and tom.age == 3

因此,您需要為該變量保留一些空間,並且必須初始化並聲明它! 因為這意味着“對於一個類的所有實例,您都有一個變量”。

接下來, 最終變量必須在其聲明中填充數據,因為您可能不會! 稍后編輯該變量! 像const(constant)

所以有最后一個靜態的final 您可能已經了解到,該變量適用於類的每個實例,並在其聲明時進行初始化,並且整體上不可更改! 解釋了Java類的綜合“ const”(常量)變量!

你去!

靜態最終變量必須直接(在變量附近)或使用靜態塊進行初始化。

最終變量(非靜態)必須直接聲明(在變量附近),也可以使用初始化塊或在對象構造函數中聲明。

暫無
暫無

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

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