Olá pessoal… tenho uma dúvida no seguinte código tirado do WhizLabs:
class FinalizeTest {
int x;
FinalizeTest(int i){
x=i;
}
protected void finalize(){
System.out.println(x);
}
public static void main(String[] args) {
FinalizeTest ft1 = new FinalizeTest(10);
ft1.finalize();
FinalizeTest ft2 = new FinalizeTest(20);
ft1 = null;
ft2 = null;
System.gc();
}
}
Os possíveis resultados são: (escolha 2)
[a] Compila e executa sem erros; imprime 10
[b] Compila e executa sem erros; imprime 102010
[c] Não compila
[d] Compila e executa sem erros; imprime 2010
[e] Compila e executa sem erros; nao imprime nada
[f] Runtime Exception
Não entendi porque a resposta correta é A e B. A resposta A eu entendi pois não há garantias que o GC vai ser executado, mas se a resposta B estiver correta, entao finalize() vai ser chamado mais de uma vez no objeto ft1; isso que não entendi.
Alguém pode me explicar?