簡體   English   中英

Java中的最終和靜態最終用法

[英]Final and Static Final usage in Java

這來自“ Java思維”中“恢復類”一章的Ex18。 代碼如下:

 public class E18 {
  public static void main(String[]args)
   {
    System.out.println("First object:");
    System.out.println(new WithFinalFields());
    System.out.println("First object:");
    System.out.println(new WithFinalFields());
   }

  }

class SelfCounter{
 private static int count;
 private int id=count++;
 public String toString()
 {
    return "self counter"+id;
 }

 }

class WithFinalFields
{
  final SelfCounter selfCounter=new SelfCounter();
  static final SelfCounter scsf=new SelfCounter();

      public String toString()
      {
           return "selfCounter="+selfCounter+"\nscsf="+scsf;
      }

}

代碼的輸出為:

 First object:
 selfCounter=self counter1
 scsf=self counter0

 First object:
 selfCounter=self counter2
 scsf=self counter0

我能理解為什么在這兩次運行中,由於聲明為final和static字段,因此scsf實例始終將ID分配為0。 令我感到困惑的是為什么將“ selfCounter”對象的id分別指定為1和2,我對如何基於另一個靜態實例變量“ count”進行id的計算有些困惑。

感謝您的指導。

ID為1和2,因為您要創建三個 SelfCounter對象,所有這些對象共享相同的計數字段,該字段隱式初始化為零。

第一個是WithFinalFields中的靜態SelfCounter。 它的ID為零,因為count字段被隱式初始化為零,而count ++的值為零。

第二個ID為1,因為count ++的值為1。 然后,第三個ID為2,因為count ++的值為2。

變量private static int count; 是靜態變量,啟動程序時它將具有0值,並且不會重新創建。 private int id=count++; 是動態變量。
在創建SelfCounter()類的新實例時,有3種情況:1,因為該行的static final SelfCounter scsf=new SelfCounter(); ,第一次啟動new WithFinalFields()時返回1,第二次啟動new WithFinalFields()時返回1。 因此, WithFinalFields()的第一次和第二次啟動期間的值將分別為1和2。

暫無
暫無

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

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