簡體   English   中英

在Java中的哪里初始化靜態字段?

[英]Where to initialize static fields in java?

我有幾個類,其中一個需要計算創建對象的次數(稱為lastId的int字段)。 在c ++中,我們必須在主類中初始化靜態字段值,然后才能在其他類中正確使用該靜態字段並計算已創建的對象數量。 Java呢? 我必須在哪里初始化靜態字段值。 另外,我知道如何計算對象是否已創建,但是如果對象已刪除怎么辦? Java中沒有析構函數,那么如何完成此工作?

如果您只想計算類型調用的活動對象數

jps -lvm  # to find the pid of your process
jmap -histo {pid} # count all objects in the system

要么

jmap -histo:live {pid} # count objects referenced

這將按類別為您提供實例數量的計數。

如果您想可視化應用程序在做什么,請嘗試

jvisualvm

這將提供諸如已用內存,線程等狀態的統計信息,以及此處正在消耗CPU和創建哪些對象的故障的統計信息。


Java呢?

您只需用類似的方法初始化它們

static int counter = 0;

我必須在哪里初始化靜態字段值。

您將在同一位置初始化其他任何字段。

順便說一句,如果你只是這樣做

static int counter;

無論如何,默認情況下它將是0,所以我懷疑您不需要初始化它。

如果對象已刪除怎么辦?

這很容易,因為您無法刪除對象。 因此答案始終為0。

Java中沒有析構函數,那么如何完成此工作?

Java沒有這樣的東西,所以這個問題毫無意義。

您可以在聲明中或在靜態初始化程序中進行初始化:

public class test
{
    //this is fine:
    public static int i = 1;

    //or this:
    public static int i;
    static
    {
        i = 1;
    }
}

如何初始化靜態字段? 1.在聲明時初始化字段。 2.在靜態塊中初始化。 3.初始化為null並從其他位置進行設置。 這並不是真正初始化為一個值,只是稍后再設置一個有意義的值。

有關示例,請參閱Dave Doknjas的答案。

如何計算物體? 請參閱彼得·勞瑞(Peter Lawrey)的答案。

那析構函數呢? 由於為您處理了對象集合,因此當沒有對象的引用時,就不需要析構函數。 您不應該嘗試使用Java管理自己的集合,這對您而言是一項出色的工作。 如果在收集對象時絕對需要完成某些操作,則應查看finalize方法,該方法在收集對象時運行。

有關確定的更多信息,請參見http://javarevisited.blogspot.com/2012/03/finalize-method-in-java-tutorial.html

暫無
暫無

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

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