Введение в деструктор в Java

Деструкторы в Java можно узнать с помощью метода finalize в Java. Концепция такая же, как метод финализации. Java работает для всех, кроме деструктора с помощью сборки мусора. Следовательно, в случае необходимости вызова деструктора это можно сделать с помощью метода finalize. Этот метод не является независимым, так как он основан на сборке мусора. Сборщик мусора - это поток, который удаляет или уничтожает неиспользуемый объект в области кучи. Скажите, если объект подключен к файлу, или, скажем, к какому-либо приложению базы данных или сетевым подключениям, перед удалением или уничтожением объекта он должен закрыть все подключения, связанные с этими ресурсами, прежде чем будет произведена сборка мусора. Это закрытие функций выполняется путем вызова метода finalize.

Определение деструктора в Java

«Деструктор - это метод, вызываемый, когда происходит разрушение объекта. «Основная цель деструктора - освободить выделенную память, а также очистить ресурсы, такие как закрытие открытых файлов, закрытие соединений с базой данных, закрытие сетевых ресурсов и т. Д.,

Синтаксис

Class Object
(
protected void finalize()
(
//statements like closure of database connection
)
)

Как работает деструктор в Java?

У деструктора есть метод finalize () в Java, который похож на деструктор в C ++. Когда объекты созданы, они сохраняются в памяти кучи. Они доступны основным или дочерним потокам. Поэтому, когда эти объекты больше не используются основным потоком или его дочерними потоками, они становятся пригодными для сбора мусора, и полученная память теперь становится доступной при создании новых объектов. Прежде чем объект является мусором, собираемым сборщиком мусора, JRE (среда выполнения Java) вызывает метод finalize (), чтобы закрыть потоки ввода-вывода, соединения с базой данных, сетевые соединения и т. Д. Обратите внимание, что вызываемый метод finalize защищен. Почему finalize защищен, потому что он может быть вызван базовым классом или производным классом? Метод finalize присутствует в классе Object. Таким образом, в случае, если вы хотите вызвать этот метод finalize из других объектов, вы можете изменить его как открытый.

Синтаксис:

protected void finalize throws Throwable()
(
//Keep some resource closing operations here
)

Методы финализации ()

  1. Метод finalize () защищен, как определено в классе java.lang.Object.
  2. Метод finalize () вызывается только один раз.
  3. чтобы переопределить метод finalize (), вам нужно явно вызвать метод finalize.
  4. GC () - это служба JVM для выполнения сборки мусора, она вызывается, когда память кучи заполнена и требует памяти для новых поступающих объектов.
  5. JVM игнорирует все исключения, кроме непроверенных исключений, возникающих в методе finalize.

Пример № 1

В приведенной ниже программе вместо класса finalize, присутствующего в программе, вызывается соответствующий классу finalize класса String. Метод финализации здесь переопределяется.

Код:

public class Demo
(
public static void main(String() args)
(
Integer i = new Integer(2);
i = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Выход:

Пример № 2

В приведенной ниже программе метод finalize вызывается изнутри, явного вызова не требуется.

Код

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Выход:

Пример № 3

В приведенной ниже программе финализация была вызвана внутренне в зависимости от количества созданных объектов.

Код

public class NewProgram(
public void finalize()(
System.out.println("object is garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1=null;
np2=null;
System.gc();
System.out.println("In the Main Method");
)
)

Выход:

Пример № 4

В приведенной ниже программе созданы два объекта, финализация вызывается один раз, так как оба объекта указывают на одно и то же.

Код:

public class NewProgram(
public void finalize()(
System.out.println("garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1 = np2; // both now pointing to same object
System.gc();
System.out.println("in the Main Method");
)
)

Выход:

Пример № 5

В приведенной ниже программе метод finalize будет вызываться дважды как явно, так и внутренне.

Код

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
)
)

Выход:

Пример № 6

В приведенной ниже программе есть арифметическое исключение, вызываемое в методе finalize, так как он вызывается явно, что дополнительно вызывает исключение и останавливает выполнение оставшейся программы.

Код:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Выход:

Пример № 7

В приведенной ниже программе исключение не вызывается, поскольку оно не вызывается явно и продолжает выполнение оставшейся программы.

Код:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Выход:

Преимущества деструктора в Java

  1. Деструктор уничтожает созданное конструктором значение в пространстве в куче памяти.
  2. Деструктор всегда вызывается в конце программы.
  3. Деструктор никогда не перегружается. Деструктор не принимает аргументов.
  4. Нет необходимости определять наш конструктор, компилятор создает для нас один.

Вывод

Надеюсь, что эта статья была интересной и информативной как для вас, чтобы изучить тему. Данная статья охватывает почти все темы, которые вы ищете, и надеюсь, что отвечает всем вашим требованиям.

Рекомендуемые статьи

Это было руководство к Destructor в Java. Здесь мы обсудили определение деструктора в Java, как деструктор работает в Java с методами, преимуществами и различными примерами. Вы также можете просмотреть нашу другую предлагаемую статью, чтобы узнать больше-

  1. Что такое интерфейс Java?
  2. Что такое интерфейс Java?
  3. Инструменты Java
  4. Макет в Java
  5. Конструктор и деструктор в Java
  6. Примеры деструкторов в Python
  7. JRE против JVM | Топ 8 отличий с (Инфографика)
  8. Деструктор в PHP с примерами