//tenta ler esse ultimo arquivotry{ContatoReadercr=newContatoReader(ap.getLastFile());agenda=cr.getMap();}//trycatch(Exceptione)//se não conseguir, cria a agenda{agenda=newHashMap(40,40);}//catchfinally{cr.finalize();}
Voce declarou a variavel cr dentro do try. Por isso ela nao eh visivel dentro do finally. Declare-a fora do try, deixando apenas para inicializa-la dentro do try. Ai vai rolar.
Marcio Kuchma
Rubem_Azenha
eu sobrescrevi o metodo finalize…
mas ok… declarei antes do try…
no caso eu sobrescrevi o finalize fechandos todas as conexões de arquivo e botando null...
kuchma
Soh pra constar: isso nao eh seguro. Nao eh garantido que a VM va executar o finalize() - nao confie nele se voce precisa realizar coisas que nao podem falhar (acho que fechar arquivos eh um desses casos :D).
Marcio Kuchma
Rubem_Azenha
mas eu sobrescrevi o metodo…
isso não tornaria o metodo “executavel” a qq momento?
caiofilipini
microfilo:
mas eu sobrescrevi o metodo…
isso não tornaria o metodo “executavel” a qq momento?
Sim. Mas você tá executando ele na mão, certo? A idéia do finalize() é que ele deve ser chamado automaticamente quando o GC vai limar seu objeto da memória. O que o kuchma disse é que isso não é garantido. No seu caso, tudo bem, você faz a chamada na mão.
Agora me veio outra coisa na cabeca: considerando que o finalize() eh chamado uma e apenas uma vez pela VM sera que a execucao manual dele influencia alguma coisa nisso na hora do GC? Ou a VM diferencia chamadas dela das dos outros?
[Depois de tres minutos] Pois eh - testei aqui e realmente posso chamar o finalize() diversas vezes. Acho que a VM faz essa distincao na boa.
Em todo caso microfilo, se voce nao tem nenhuma necessidade especial com relacao ao nome do metodo acho que seria uma Boa Coisa™ renomea-lo.