Eliminar un objeto en Java
-
Java Borrar un Objeto haciendo referencia a
null
-
Java Borra un objeto confinado en un ámbito de aplicación refiriéndolo a
null
En los siguientes ejemplos aprenderemos a eliminar un objeto en Java y a usar el recolector de basura.
Java Borrar un Objeto haciendo referencia a null
En el primer ejemplo de borrar un objeto de Java, creamos una clase con un constructor que inicializa las variables name
y age
. En el método main
, se crea un objeto de la clase User
, y se pasan los valores para name
y age
. Ahora que el objeto
ha sido inicializado, podemos usarlo para obtener age
y compararlo para mostrar un mensaje. Pero después de eso, queremos eliminar myObject
para que no pueda ser usado más.
Para hacer esto, inicializamos myObject
una vez más pero con nulo. Una vez que el myObject
es null
, no podemos usarlo para llamar a ninguno de sus métodos o variables, y arrojará una excepción si lo hacemos. System.gc()
se utiliza para recoger cualquier basura sobrante para que no queden campos u objetos vacíos para liberar la memoria.
Podemos ver que hay un método finalize()
en la clase User
. Es un método anulado que se llama en el objeto antes de recolectar la basura.
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 Borra un objeto confinado en un ámbito de aplicación refiriéndolo a null
En el código que se muestra a continuación, tenemos una clase Student
con tres miembros de datos a los que se les asignan valores usando el constructor parametrizado de la clase. Tiene un método showDetails()
y un método showNextIndex()
. También tiene el método finalize()
para mostrar el índice del siguiente estudiante.
Los nuevos objetos de la clase Student
se crean usando la palabra clave new
. Los métodos de la clase Student
son llamados a los objetos student1
y student2
. Más adelante en el código, hemos creado más objetos de la clase Student
dentro de un ámbito. Después de usarlos, llamamos a System.gc()
, que pide a la JVM
que recoja los dos objetos creados en este scope.
El valor del nextIndex
se incrementa a 3
antes de entrar en el scope, y antes de salir del scope es 5
. Para disminuir el valor del nextIndex
se llama al método finalize()
usando System.runFinalization
dos veces para el valor 5
antes de que los objetos se recojan.
Entonces se muestra el valor correcto del nextIndex
, excluyendo los valores que estaban dentro del á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