2011-04-30 5 views
2

Java에서 int 또는 vector로 finalize 메소드를 호출 할 수 있습니까?finalize 메서드를 int 또는 vector로 호출 할 수 있습니까?

+0

인 Object.finalize()를 상속하지 않습니다. 예를 들어 C#에서는 int도 객체이므로 메서드가 있습니다. – Seva

+1

@Seva : 나는 놀라지 않고 있지만 몇 가지 나쁜 가정이 있으며 가장 중요한 것은 C#이 아닙니다. –

+2

결코 finalize 메서드를 호출하지 마십시오. – MeBigFatGuy

답변

6

int은 개체가 아니며 메서드가 없습니다.

java.util.Vector은 (모든 객체와 마찬가지로) finalize() 메서드를 가졌지 만 가비지 수집시 자동으로 호출됩니다.

명시 적으로 호출 할 의미 인 finalize() 메서드를 작성하면 안됩니다. 이는 놀람의 원칙에 대한 심각한 위반 일 수 있기 때문입니다.

+0

인 것 같아서 벡터의 finalize 메소드를 수정할 수 있습니까? 감사합니다 – Seva

+0

@ Seva : 네, 당신은 할 수 있지만, 당신은 이것을해서는 안됩니다. 이 메소드를 호출하면 ** 가비지 수집이되지 않습니다 **. –

+0

나는 그것이 나던 것을 안다는 것을 알고 있지만 가비지 컬렉터가 객체를 가져 오기 전에 변수의 크기와 바이트의 크기를 확인하고 싶습니다. 어떻게해야합니까? – Seva

2

당신의 동기는 무엇이며 가비지 수집과 어떤 관련이 있습니까? 개체를 수집 할 수있게하려면 이 아니고 호출 완료 인 모든 강력한 참조를 제거해야합니다.

가비지 컬렉션이 중요한 기준 읽어주십시오과 최종에 특히 절 부 A.3.6있어서 finalize()java.lang.Object에서 상속 The Truth About Garbage Collection

+0

finalize 메서드가 가비지 컬렉터와 관련이 없다고 생각하십니까? – Seva

+0

@ Seva : 나는 그것이 관련이 없다고 말하지 않습니다.당신이 직접 호출해서는 안되며 호출하는 것은 객체 수집을하지 않는다고 말합니다. Java VM는 객체의 메모리가 할당 해제되기 전에 존재하는 경우 finalize를 호출합니다. ** 다시 ** 철자가 모두 나와 있기 때문에 ** 위의 링크를보십시오. –

+0

finalize 메서드가 있으면 그것이 유용한 것이라고 생각합니다. 그래서 진정 해요. :피. 나는 너에게 +1을 줄 것이다. – Seva

2

. Java int은 기본 유형이며 이러한 유형은 객체로 간주되지 않으므로 해당 유형에 대해 finalize를 호출 할 수 없습니다.

3

질문에 너무 많은 잘못된 가정이 있기 때문에 일부는 "괴롭힘"이라고 생각합니다.

int은 원시이므로 호출 할 finalize 메소드가 없습니다.

Vector은 Java 1.2 (1998)에서 ArrayList로 대체 된 레거시 클래스입니다. 그것은 보호 된 finalize 메소드를 가지고 있습니다. protected은 하위 클래스에서만 호출해야 함을 의미합니다. 따라서 쉽게 액세스 할 수 없습니다.

그러나 Vector 나 다른 클래스에서 finalize를 호출하는 것은 좋지 않습니다. 호출하려는 기능이있는 finalize 메서드가있는 경우 finalize()를 호출하는 대신 동일한 작업을 수행하는 public 메서드를 만듭니다.

BTW : Vector.finalize()를 호출 했더라도 뭐든지해라. 그것은 {}

관련 문제