簡體   English   中英

在 Java 中,為什么未將類的 New 實例分配給變量

[英]In Java why is the New instance of a class not assigned to a variable

Java 初學者。 我已經多次看到下面的行並且無法理解它...... new TestCode() - 它似乎是一個實例,但沒有分配給任何東西 - 那么如何引用它呢?

class TestCode
{
   public TestCode()
   {
       System.out.println();
       System.out.println( "Welcome to the Program");
    }

    public static void main( String args[] ){new TestCode();}

}

它不能被引用。 新實例被創建並立即丟棄。

然而,它的構造函數代碼被調用,因此會發生副作用(如果有的話——在你的例子中有——它會打印到標准輸出)。 然而,做這樣的事情是一種不好的做法。

請參閱 Zaki 關於將其分配給變量的答案。 然后你可以參考它,做一些事情。

當你通過new代碼字實例化一個對象時,堆上的空間(用於存儲對象及其字段的系統內存部分)被分配,並且構造函數被執行。 在這種情況下,構造函數寫入標准輸出,無論是否創建對對象的引用,都會執行此操作。

之后,您是對的,由於不存在對它的引用,因此無法訪問該對象。 因此垃圾收集器最終會釋放內存空間。

正如亞當所說,這通常是不鼓勵的,因為它破壞了您的期望,即構造函數應該初始化對象,並且應該可以通過其方法與外部世界進行交互。

因此,即使它有點長,更好的結構化代碼也可能如下所示:

class TestCode {
   public TestCode() {}

   public void welcome() {
      System.out.println();
      System.out.println("Welcome to the Program");
   }

   public static void main( String args[] ){
      TestCode tc = new TestCode();
      tc.welcome();
   }
}

PS當然,在某些情況下,您可能希望在每次實例化時都在實例之外進行操作,例如,保留類的所有實例的靜態列表,因此每次構造時都將特定實例添加到其中. 盡管如此,最好創建一個私有的 init() 方法並從構造函數調用它,以便更好地分離具有不同功能的元素。

再舉一個例子,這里有一種不同的、功能相同的方式可以重新編寫您的代碼:

class TestCode {
   public TestCode() {
      init();
   }

   private void init() {
      System.out.println();
      System.out.println("Welcome to the Program");
   }

   public static void main( String args[] ){
      TestCode tc = new TestCode();
      // Or simply: new TestCode();
   }
}

暫無
暫無

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

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