Apagar um objecto em Java
-
Java Excluir um
Object
referenciando-o anull
-
Java Apagar um objecto confinado num âmbito, referindo-o a
null
Aprenderemos como apagar um objecto em Java e utilizar um colector de lixo nos exemplos seguintes.
Java Excluir um Object
referenciando-o a null
No primeiro exemplo de eliminação de um objecto Java, criamos uma classe com um construtor que inicializa as variáveis name
e age
. No método main
, é criado um object
da classe User
, e são passados valores para name
e age
. Agora que o objecto
foi inicializado, podemos utilizá-lo para obter a age
e compará-lo para exibir uma mensagem. Mas depois disso, queremos apagar o myObject
para que não possa ser mais utilizado.
Para o fazer, inicializamos novamente o myObject
, mas com nulidade. Uma vez que o myObject
é null
, não podemos utilizá-lo para chamar qualquer um dos seus métodos ou variáveis, e se o fizermos, ele abrirá uma excepção. O System.gc()
é utilizado para recolher quaisquer restos de lixo para que não haja campos ou objectos vazios para libertar a memória.
Podemos ver que existe um método finalize()
na classe User
. É um método sobreposto que é chamado ao objecto antes de recolher o lixo.
public class JavaDeleteObject {
public static void main(String[] args) {
User myObject = new User("John", 30);
int userAge = myObject.age;
if (userAge > 25) {
System.out.println("User age is : " + userAge);
} else {
System.out.println("User age is less than 25 : " + userAge);
}
myObject = null;
System.gc();
System.out.println(myObject.age);
}
}
class User {
String name;
int age;
User(String n, int a) {
name = n;
age = a;
}
protected void finalize() {
System.out.println("Object is garbage collected.");
}
}
Resultado:
User age is : 30
Object is garbage collected.
Exception in thread "main" java.lang.NullPointerException
at com.company.JavaDeleteObject.main(JavaDeleteObject.java:18)
Java Apagar um objecto confinado num âmbito, referindo-o a null
No código mostrado abaixo, temos uma classe Student
com três membros de dados aos quais são atribuídos valores utilizando o construtor parametrizado da classe. Tem um método showDetails()
e showNextIndex()
. Também tem o método finalize()
para mostrar o índice do próximo aluno.
Novos objectos da classe Student
são criados utilizando a palavra-chave new
. Os métodos da classe Student
são chamados nos objectos student1
e student2
. Mais tarde, no código, criámos mais objectos da classe Student
dentro de um âmbito. Depois de os utilizarmos, chamamos System.gc()
, que solicita a JVM
para recolher o lixo dos dois objectos criados neste âmbito.
O valor nextIndex
é aumentado para 3
antes de entrar no escopo, e antes de sair do escopo é 5
. Para diminuir o valor nextIndex
o método finalize()
é chamado utilizando System.runFinalization()
duas vezes para o valor 5
antes dos objectos serem recolhidos.
O valor correcto nextIndex
é então mostrado, excluindo os valores que estavam dentro do âmbito.
class Student {
private int index;
private String name;
private int age;
private static int nextIndex = 1;
Student(String name, int age) {
this.name = name;
this.age = age;
this.index = nextIndex++;
}
public void showDetails() {
System.out.println("Student at Index : " + index + ", Student name: " + name + ", age: " + age);
}
public void showNextIndex() {
System.out.println("Next Index: " + nextIndex);
}
protected void finalize() {
--nextIndex;
}
}
class UseStudent {
public static void main(String[] args) {
Student student1 = new Student("John", 23);
Student student2 = new Student("Doe", 20);
student1.showDetails();
student2.showDetails();
student1.showNextIndex();
student2.showNextIndex();
{
Student student3 = new Student("Sam", 22);
Student student4 = new Student("Ben", 21);
student3.showDetails();
student4.showDetails();
student3.showNextIndex();
student4.showNextIndex();
student3 = student4 = null;
System.gc();
System.runFinalization();
}
student2.showNextIndex();
}
}
Resultado:
Student at Index : 1, Student name: John, age: 23
Student at Index : 2, Student name: Doe, age: 20
Next Index: 3
Next Index: 3
Student at Index : 3, Student name: Sam, age: 22
Student at Index : 4, Student name: Ben, age: 21
Next Index: 5
Next Index: 5
Next Index: 3
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn