Realmente. Eu confundi as regras para finalize da JVM com as regras para
finaliza��o da CLR. Em .NET os finalizers podem executar mais de uma vez...
(o que, sinceramente, faz muito mais sentido).
<snip language="C#">
using System;
public class Highlander
{
public static Highlander Instance;
public Highlander()
{
}
~Highlander()
{
Console.WriteLine("finalize");
Highlander.Instance = this;
GC.ReRegisterForFinalize(this);
}
}
public class App
{
public static void Main(string[] args)
{
new Highlander();
}
}
</snip>
Foi uma thread interessante :-)
Rodrigo
>From: "Bruno Borges" <[EMAIL PROTECTED]>
>Reply-To: "Bruno Borges" <[EMAIL PROTECTED]>
>To: <[EMAIL PROTECTED]>
>Subject: [enterprise-list] Concluindo ressurei��o
>Date: Tue, 1 Oct 2002 16:48:20 -0300
>
>� poss�vel ressucitar um objeto apenas uma vez... segue o codigo:
>
>public class Teste extends Object {
>
> public static Teste instancia;
>
> public Teste() {}
> public String oi() {return "oi";}
>
> public void finalize {
> instancia = this;
> System.out.println("finalize()");
> }
>
> public static void main(String a[]) {
> Teste t = new Teste();
> t = null; // removeu a unica referencia q restava ao objeto Teste
> System.gc(); // qdo ele for remover o objeto da memoria, vai executar
>o
>finalize, entao "finalize()" serah impresso no console
> t = Teste.instancia; // instancia recebeu a referencia ao objeto
>Teste
>durante o metodo finalize, entao ainda temos o objeto
>
> // agora vem o legal
>
> t = null; // removemos uma referencia
> Teste.instancia = null; // removemos a ULTIMA referencia ao objeto
>Teste (adios amigo)
> System.gc(); // serah q vai ressucitar o objeto?! pois a principio
>isso
>deveria executar o finalize... axo q nao heim... bom, vamos ver...
>
> t = Teste.instancia; // serah q recuperamos o objeto?
> System.out.println(t.oi()); // oooops!!! NullPointerException!!!
> System.exit(1);
> }
>
>}
>
>
>_.~._.~._.~._.~._.~._.~._.~._.~._
>Programador Java Junior, 19 anos.
>_.~._.~._.~._.~._.~._.~._.~._.~._
>Email: [EMAIL PROTECTED]
>#UIN: 8584744
>
>_______________________________________________________________________
>Yahoo! Encontros
>O lugar certo para encontrar a sua alma g�mea.
>http://br.encontros.yahoo.com/
>
>---------------------------------------------------------------------
>Para cancelar a subscri��o, envie mensagem para:
>[EMAIL PROTECTED]
>Para comandos adicionais, envie mensagem para:
>[EMAIL PROTECTED]
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]