2011-04-30 64 views
2

是否有可能在Java中調用int或vector的finalize方法?是否有可能將finalize方法調用爲int或向量?

+0

不要嚇壞了。例如在C#中,即使int也是對象,所以它們有方法。 – Seva 2011-04-30 16:23:48

+1

@Seva:我沒有嚇到,但是你有幾個不好的假設,最重要的是,這不是C#。 – 2011-04-30 16:26:29

+2

永遠不要調用finalize方法。 – MeBigFatGuy 2011-04-30 16:34:40

回答

6

int不是一個對象,也沒有方法。

A java.util.Vector擁有(像任何對象)finalize()方法,但它在對象被垃圾收集時自動調用。

你永遠不應該寫一個finalize()方法,這個方法應該被明確地調用,因爲那樣會公然違反最小驚喜的原則。

+0

我能夠修改矢量的最終化方法嗎?謝謝 – Seva 2011-04-30 16:24:32

+0

@Seva:是的,你可以,但不是你不應該這樣做。調用這個方法不會**收集對象垃圾。 – 2011-04-30 16:25:39

+0

我知道它不能確保,但我想檢查矢量的大小,以字節爲單位,並在垃圾收集器取得對象之前將其總和爲一個變量。我該怎麼做? – Seva 2011-04-30 16:26:54

2

你對此的動機是什麼?這與垃圾收集有何關係?要使對象可收集,您需要刪除對它的所有強引用,而不是調用finalize。

請閱讀垃圾收集這個重要的參考,特別是在敲定部分,部分A.3.6 The Truth About Garbage Collection

+0

你不覺得finalize方法與垃圾收集器有關嗎? – Seva 2011-04-30 16:32:38

+0

@Seva:我不說這沒有關係。我確實說過,你不應該直接調用它,並且稱它不會使對象集合。 Java VM將在對象的內存被釋放之前調用finalize。 **再次**請看上面的鏈接,因爲它的拼寫都在那裏。 – 2011-04-30 16:33:23

+0

我認爲如果finalize方法存在,它有一些實用性。所以冷靜下來。 :P。我會爲你+1。 – Seva 2011-04-30 16:47:50

2

方法finalize()java.lang.Object繼承。 Java int是一種原始類型,這些類型不被視爲對象,因此不可能在這些類型上調用finalize。

3

我覺得有些人「嚇壞了」,因爲它在這個問題上有太多不正確的假設。

int是一個原語,所以它沒有一個finalize方法來調用。

Vector是由ArrayList在Java 1.2(1998)中替換的遺留類。它有一個被保護的finalize方法。 protected意味着它只能從一個子類中調用。所以你不能輕易訪問它。

但是,我不建議您致電Vector或任何其他課程。如果你有一個你想要調用的函數的finalize方法,創建一個公共方法,它可以做同樣的事情,而不是調用finalize()

BTW:即使你確實調用過Vector.finalize(),它也不會做任何事情。它繼承Object.finalize()這是{}

相關問題