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.
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):
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