Então estou estudando para a certificação. Entendi bem a parte do garbage collector. Mas eu fiquei curioso de um exemplo real de uso do finalize, já que como o próprio livro diz não existe garantia que ele seja chamado e no geral nao se faz sobreescrita deste metodo.
Alguém poderia me dizer algum exemplo onde se faz bom uso do finalize?
entao … se tu quiser um exemplo do finalize funcionando ( acho q não é isu q tu qr) tu me fala rsrsrs…
mas no mundo real … ate onde eu sei … o bom uso e não usar o finalize rsrssr … como a execução dele não é garantida … tipo … digamos … q vc tenha uma instrução q não vai fazer muita falta( praticamente impossivel q exista isu) e tu qr q ela seja executada quando o objeto for coletado … aí tu bota no finalize …
mas acara … o melhor é não usar mesmo … XD pra q colocaram? soh perguntando pra eles mesmo rsrsrrs
valewww
E
enantiomero
Um exemplo clássico de uso de “finalize” é quando você tem uma classe que contém objetos “emprestados” do sistema operacional, como um handle para um arquivo ou socket ou semáforo ou objeto gráfico (por exemplo, no Windows um handle para o GDI ou FONT).
Essa classe deve devolver esses objetos se, por alguma falha no programa ou imperícia do programador, objetos dessa classe ficarem sem ser referenciados e estarem disponíveis para serem recolhidos pelo coletor de lixo.
Ou seja, essa classe pode implementar um método “finalize” para que, algum dia, quando o coletor de lixo se dignar a chamar esse método (usualmente na segunda coleta completa de lixo depois de o objeto estar disponível, mas talvez mais tarde ainda), ele resolver fechar esse arquivo, ou socket, ou semáforo.
Eu disse “pode” mas não disse “deve”; o correto é sempre ter um método que faz isso explicitamente (como é o caso do método “close” para as classes que lidam com arquivos, como a FileInputStream), e forçar o programador a sempre chamar esses métodos na cláusula “finally”. Um exemplo de classe que tem um finalizador, mas que não deve ser confiado, é a FileInputStream.
F
fausto
Pelo jeito é mesmo bem difícil de usar . Valeu pelos exemplos.
V
victorwss
Eu já usei para fazer algo assim:
publicclassConexao{// Um monte de atributos.privatebooleanfechado;publicConexao(){// Inicializa todos os atributos.fechado=false;}// Um monte de métodos específicos:publicvoidmetodoEspecifico(){if(fechado)thrownewIllegalStateException();}publicvoidclose(){fechado=true;}protectedvoidfinalize(){if(fechado)return;close();System.err.println("Perigo: A conexão vazou e não foi fechada corretamente. Verifique o seu código.");}}