Введение в деструктор в 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
)
Методы финализации ()
- Метод finalize () защищен, как определено в классе java.lang.Object.
- Метод finalize () вызывается только один раз.
- чтобы переопределить метод finalize (), вам нужно явно вызвать метод finalize.
- GC () - это служба JVM для выполнения сборки мусора, она вызывается, когда память кучи заполнена и требует памяти для новых поступающих объектов.
- 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
- Деструктор уничтожает созданное конструктором значение в пространстве в куче памяти.
- Деструктор всегда вызывается в конце программы.
- Деструктор никогда не перегружается. Деструктор не принимает аргументов.
- Нет необходимости определять наш конструктор, компилятор создает для нас один.
Вывод
Надеюсь, что эта статья была интересной и информативной как для вас, чтобы изучить тему. Данная статья охватывает почти все темы, которые вы ищете, и надеюсь, что отвечает всем вашим требованиям.
Рекомендуемые статьи
Это было руководство к Destructor в Java. Здесь мы обсудили определение деструктора в Java, как деструктор работает в Java с методами, преимуществами и различными примерами. Вы также можете просмотреть нашу другую предлагаемую статью, чтобы узнать больше-
- Что такое интерфейс Java?
- Что такое интерфейс Java?
- Инструменты Java
- Макет в Java
- Конструктор и деструктор в Java
- Примеры деструкторов в Python
- JRE против JVM | Топ 8 отличий с (Инфографика)
- Деструктор в PHP с примерами