Introducere în distrugător în Java

Distrugătorii din Java pot fi învățați cu metoda de finalizare în Java. Conceptul este la fel ca metoda de finalizare. Java funcționează pentru toate, cu excepția distrugătorului cu ajutorul colectării gunoiului. Prin urmare, în cazul în care este necesar să apelați distrugătorul, acesta poate fi realizat cu ajutorul metodei de finalizare. Această metodă nu este independentă, întrucât se bazează pe colectarea gunoiului. Colectorul de gunoi este un fir care șterge sau distruge obiectul neutilizat din zona de grămadă. Spuneți dacă obiectul este conectat la un fișier sau spuneți o aplicație de bază de date sau conexiuni de rețea, înainte de a șterge sau distruge obiectul, trebuie să închidă toate conexiunile legate de aceste resurse înainte de colectarea gunoiului. Aceste închideri ale funcțiilor se fac apelând la metoda de finalizare.

Definiția Destructor în Java

„Distrugătorul este o metodă numită atunci când are loc distrugerea unui obiect. „Principalul obiectiv al distrugătorului este eliberarea memoriei alocate și, de asemenea, curățarea resurselor precum închiderea fișierelor deschise, închiderea conexiunilor la baze de date, închiderea resurselor de rețea etc.

Sintaxă

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

Cum funcționează distrugătorul în Java?

Distrugătorul are o metodă de finalizare () în java, care este similar cu distrugătorul din C ++. Atunci când obiectele sunt create, acestea sunt stocate în memoria acumulatorului. Acestea sunt accesibile prin fire principale sau pentru copii. Așadar, atunci când aceste obiecte nu mai sunt folosite de thread-ul principal sau de firele sale copil, ele devin eligibile pentru colectarea gunoiului, iar memoria care a fost achiziționată devine disponibilă prin crearea de noi obiecte. Înainte ca un obiect să fie un gunoi colectat de colectorul de gunoi, JRE (Java Runtime Environment) apelează la metoda finalize () pentru a închide fluxurile de intrare-ieșire, conexiunile bazei de date, conexiunile de rețea etc. De ce finalizarea este protejată, deoarece poate fi apelată fie de clasa de bază, fie de clasa derivată? metoda finalizării este prezentă în clasa Obiect. Astfel, în cazul în care doriți să apelați această metodă de finalizare de la alte obiecte, puteți schimba această protejare în public.

Sintaxă:

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

Metode de finalizare ()

  1. metoda finalize () este protejată așa cum este definită în clasa java.lang.Object.
  2. metoda finalize () se numește o singură dată.
  3. pentru a trece peste metoda finalize (), trebuie să apelați la metoda de finalizare în mod explicit.
  4. GC () este un serviciu al JVM pentru a executa Garbage Collection, este numit atunci când memoria heap este plină și are nevoie de memorie pentru obiecte noi sosite.
  5. JVM ignoră toate excepțiile, cu excepția excepțiilor marcate, care apar în metoda de finalizare.

Exemplul # 1

În programul de mai jos, metoda de finalizare corespunzătoare clasei String este numită în locul metodei de finalizare prezentă în program. Metoda de finalizare este anulată aici.

Cod:

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

ieşire:

Exemplul # 2

În programul de mai jos, metoda de finalizare se numește intern, nu este necesar un apel explicit.

Cod

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

ieşire:

Exemplul # 3

În programul de mai jos, finalizarea a fost numită intern, în funcție de numărul de obiecte create.

Cod

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

ieşire:

Exemplul # 4

În programul de mai jos, două obiecte sunt create, finalizarea este numită o dată, deoarece ambele obiecte sunt îndreptate spre același lucru.

Cod:

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

ieşire:

Exemplul # 5

În programul de mai jos, metoda de finalizare va fi apelată de două ori în mod explicit și intern atât.

Cod

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

ieşire:

Exemplul # 6

În programul de mai jos, există o excepție aritmetică numită în metoda de finalizare, deoarece este numită în mod explicit, care provoacă în continuare excepția și oprește executarea programului rămas.

Cod:

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

ieşire:

Exemplul # 7

În programul de mai jos, nu există o excepție numită, deoarece nu este numită explicit și continuă execuția programului rămas.

Cod:

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

ieşire:

Avantajele distrugătorului în Java

  1. Distrugătorul distruge valoarea creată de constructor pentru a spaționa în memoria mormanului.
  2. Distrugătorul este apelat întotdeauna la sfârșitul programului.
  3. Distrugătorul nu este niciodată supraîncărcat distrugătorul nu ia niciun argument.
  4. Nu este nevoie să ne definim constructorul, compilatorul creează unul pentru noi.

Concluzie

Sper că acest articol a fost interesant și informativ atât pentru a afla subiectul. Acest articol dat a cuprins aproape toate subiectele pe care le căutați și sper să vă îndeplinească toate cerințele.

Articole recomandate

Acesta a fost un ghid pentru Destructor în Java. Aici am discutat despre Definiția distrugătorului în Java, Cum funcționează distrugătorul în Java cu Metode, avantaje și exemple diferite. De asemenea, puteți parcurge și celălalt articol sugerat pentru a afla mai multe-

  1. Ce este interfața Java?
  2. Ce este interfața Java?
  3. Instrumente Java
  4. Aspect în Java
  5. Constructor și distrugător în Java
  6. Exemple de distrugător în Python
  7. JRE vs JVM | Top 8 diferențe cu (Infografie)
  8. Distrugător în PHP cu exemple