Finalize()
Java permite objetos implementar um método chamado finalize(). Este método é chamado se o garbage collector tentar coletar o objeto.
Se o garbage collector não executar, o método não é chamado. Se o garbage collector falhar ao coletar o objeto e tentar novamente mais tarde, o método não é chamado na segunda vez.
Na prática, isto significa que é altamente recomendado não utilizar em um projeto real. Para o exame apenas lembre que o método finalize não é chamado duas vezes.
Resumindo: o método finalize evita que o objeto seja excluído pelo o garbage collector.
Este código não produz nenhuma saída quando executado.
1 2 3 4 5 6 7 8 |
public class Finalizer { protected void finalize() { System.out.println("Calling finalize"); } public static void main(String[] args) { Finalizer f = new Finalizer(); } } |
Não mostra nenhuma saída, porque há a necessidade de executar o garbage collector antes do método finalize().
Enquanto f é elegível para o garbage collection, o Java está executando outras coisas mais importantes do que executar o garbage collector a todo momento.
Para o exame você precisa saber que o finalize() executa nenhuma ou uma vez. Veja o seguinte código (código 1):
1 2 3 4 5 6 |
public class Finalizer { private static List objects = new ArrayList(); protected void finalize() { objects.add(this); // não faça isto } } |
Lembre-se, finalize() só executa quando o objeto é elegível para o garbage collection.
O problema no código 1 é que o objeto não é elegível para o garbage collection, porque uma variável estática permanece no escopo (ativa) até a finalização do sistema.
O Java é esperto o suficiente para saber se deve cancelar a tentativa de coletar o objeto.
Suponhamos que um objeto esteja nulo. Agora sim podemos finalmente remover o objeto da memória. O Java vai lembrar que já executou o finalize() uma vez e não executará novamente.
Entendendo os Operadores Java
Um operador Java é um símbolo especial que pode ser aplicada a variáveis, valores ou literais.
Há vários operadores no Java: unário, binário e ternário. Este tipo de operadores pode ser aplicado a um, dois ou três operandos, respectivamente.
Operadores Java não necessariamente são lidos da esquerda para direita. Por exemplo:
int y = 4;
double x = 3 + 2 * –y;
No exemplo, você deve primeiro decrementar o y para 3, e depois multiplicar o resultado por 2, e finalmente adicionar 3.
Se não houver parênteses na expressão, o Java irá seguir o que está na tabela 2.1. Se dois operadores têm a mesma prioridade, o Java irá executar da esquerda para direita.
Deixe um comentário