Finalizar()
Java permite que os objetos implementem um método chamado finalize() podendo ser chamado. Este método é chamado se o coletor de lixo tentar coletar o objeto. Se o coletor de lixo não é executado, o método não é chamado. Se o coletor de lixo falhar ao coletar o objeto, ele tentará executá-lo novamente mais tarde, o método não é chamado pela segunda vez.
Na prática, isso significa que é altamente improvável que você use em projetos reais. Felizmente, não há muito o que lembrar sobre finalize() para o exame. Apenas tenha em mente que talvez não será chamado e que definitivamente não será chamado duas vezes.
Com isso dito, essa chamada não produz saída quando a executamos:
public class Finalizer {
protected void finalize() {
System.out.println("Calling finalize");
}
public static void main(String[] args) {
Finalizer f = new Finalizer();
}
}
O motivo é que o programa sai antes que haja necessidade de executar a coleta de lixo. Enquanto f é elegível para coleta de lixo, o Java tem coisas melhores para fazer do que coletar lixo constantemente. Para o exame, você precisa saber que essa chamada finalize() pode ser não ser executada ou executar somente uma vez. Agora, um exemplo mais interessante:
public class Finalizer {
private static List objects = new ArrayList();
protected void finalize() {
objects.add(this); // Don't do this
}
}
Lembre-se, finalize() só é executado quando o objeto é elegível para coleta de lixo. O problema aqui é que até o final do método, o objeto não é mais elegível para a coleta de lixo porque uma variável estática está se referindo a ele e variáveis estáticas permanecem no escopo até o programa terminar. Java é inteligente o suficiente para perceber isso e aborta a tentativa de jogar fora o objeto. Agora, suponha que depois os objetos do programa estejam definidos com null. Oh, bom, nós podemos finalmente, remover o objeto da memória. Java lembra de já estar finalizando() este objeto e não o fará novamente. A lição é que a chamada finalize() pode executar zero ou uma vez. Essa é exatamente a mesma lição do simples exemplo - é por isso que é tão fácil lembrar.