Въведение в Destructor в Java

Деструкторите в Java могат да се научат с метода за финализиране в Java. Концепцията е същата като метода за финализиране. Java работи за всички с изключение на деструктора с помощта на събирането на боклука. Следователно в случай, че има нужда от извикване на деструктора, това може да стане с помощта на метода за финализиране. Този метод не е независим, тъй като разчита на събирането на боклука. Събирачът на боклук е нишка, която изтрива или унищожава неизползвания обект в областта на купчината. Кажете, ако обектът е свързан към файл или кажете някакво приложение на база данни или мрежови връзки, преди да изтриете или унищожите обекта, той трябва да затвори всички връзки, свързани с тези ресурси, преди да се извърши събирането на боклука. Това затваряне на функциите става чрез извикване на метода за финализиране.

Дефиниция на Destructor в Java

„Destructor е метод, наречен, когато се извършва унищожаването на обект. „Основната цел на деструктора е да освободи разпределената памет, а също и да изчисти ресурси като затваряне на отворени файлове, затваряне на връзки към база данни, затваряне на мрежови ресурси и т.н.,

Синтаксис

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

Как работи Destructor в Java?

Деструкторът има метод за финализиране () в java, който е подобен на деструктора в C ++. Когато обектите са създадени, те се съхраняват в паметта на купчината. Те са достъпни от основни или дъщерни нишки. Така че, когато тези обекти вече не се използват от основната нишка или нейните дъщерни нишки, те стават допустими за събиране на боклука и паметта, която е придобита сега, става достъпна от създаването на нови обекти. Преди даден обект да е боклук, събран от боклукоуловителя, JRE (Java Runtime Environment) извиква метода finalize () за затваряне на входно-изходните потоци, връзките към базата данни, мрежовите връзки и др. Обърнете внимание, че нареченият метод за финализиране е защитен. Защо финализирането е защитено, защото може да бъде извикано или от базовия клас, или от извлечения клас? методът на финализиране присъства в клас Object. По този начин, в случай че искате да извикате този метод за финализиране от други обекти, можете да промените този защитен на публичен.

Синтаксис:

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

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

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

Пример №1

В програмата по-долу съответният метод за финализиране на клас 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

В програмата по-долу методът за финализиране се извиква вътрешно, не се изисква изрично повикване.

код

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

В програмата по-долу методът за финализиране ще бъде извикан два пъти изрично и вътрешно и двете.

код

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

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

Код:

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);
)
)

изход:

Предимства на Destructor в Java

  1. Деструкторът унищожава стойността, създадена от конструктора, в пространството в хепа паметта.
  2. Destructor винаги се извиква в края на програмата.
  3. Деструкторът никога не е претоварен, деструкторът не взема аргументи.
  4. Няма нужда да дефинираме нашия конструктор, компилаторът създава за нас такъв.

заключение

Дано тази статия беше интересна и информативна както за вас, за да научите темата. Тази статия е обхванала почти всички теми, които търсите и се надявам да изпълни всичките ви изисквания.

Препоръчителни статии

Това е ръководство за Destructor в Java. Тук сме обсъдили дефиницията на Destructor в Java, как работи destructor в Java с методи, предимства и различни примери. Можете също да прегледате и другата ни предложена статия, за да научите повече-

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