Introduktion til Destructor i Java
Destruktorer i Java kan læres med færdiggørelsesmetoden i Java. Konceptet er det samme som færdiggørelsesmetoden. Java fungerer for alle undtagen destruktoren ved hjælp af indsamling af skrald. I tilfælde af at der er behov for at kalde destruktoren, kan det derfor gøres ved hjælp af færdiggørelsesmetoden. Denne metode er ikke uafhængig, da den er afhængig af Garbage Collection. Affaldsopsamleren er en tråd, der sletter eller ødelægger den ubrugte genstand i bunkeområdet. Sig, hvis objektet er forbundet til en fil, eller siger nogle databaseapplikationer eller netværksforbindelser, før det slettes eller ødelægges objektet, skal det lukke alle forbindelser, der er relateret til disse ressourcer, før affaldssamlingen finder sted. Disse lukning af funktionerne udføres ved at kalde færdiggørelsesmetoden.
Definition af Destructor i Java
”Destructor er en metode, der kaldes, når ødelæggelsen af et objekt finder sted. ”Hovedmålet med destruktoren er at frigøre den tildelte hukommelse og også at rydde op i ressourcer som lukning af åbne filer, lukning af databaseforbindelser, lukning af netværksressourcer osv.,
Syntaks
Class Object
(
protected void finalize()
(
//statements like closure of database connection
)
)
Hvordan fungerer Destructor i Java?
Destruktoren har en færdiggørelsesmetode () i java, der ligner destruktoren i C ++. Når objekterne oprettes, gemmes de i bunkehukommelsen. Disse er tilgængelige via hoved- eller børnetråde. Så når disse objekter ikke mere bruges af hovedtråden eller dens underordnede tråde, er de berettigede til indsamling af skrald, og hukommelsen, der blev erhvervet, nu bliver tilgængelig ved at oprette nye objekter. Før et objekt er et skrald, der opsamles af affaldsopsamleren, kalder JRE (Java Runtime Environment) metoden færdiggørelse () for at lukke input-output-streams, databaseforbindelserne, netværksforbindelser osv. Bemærk, at den kaldte færdiggørelsesmetode er beskyttet. Hvorfor færdiggørelse er beskyttet, fordi det enten kan kaldes af baseklassen eller afledt klasse? færdiggørelsesmetode er til stede i objektklassen. Så hvis du vil kalde denne færdiggørelsesmetode fra andre objekter, kan du ændre denne beskyttet til offentlighed.
Syntaks:
protected void finalize throws Throwable()
(
//Keep some resource closing operations here
)
Metoder til færdiggørelse ()
- finalize () -metoden er beskyttet som defineret i java.lang.Object-klassen.
- finalize () -metoden kaldes kun én gang.
- For at tilsidesætte metoden finalize () skal du kalde finaliseringsmetoden eksplicit.
- GC () er en service hos JVM til at udføre Garbage Collection, det kaldes når bunkehukommelsen er fuld og har brug for hukommelse til nye ankomne objekter.
- JVM ignorerer alle undtagelser undtagen de ikke-markerede undtagelser, der forekommer i færdiggørelsesmetoden.
Eksempel 1
I nedenstående program kaldes String-klassen tilsvarende finaliseringsmetode i stedet for den færdiggørelsesmetode, der findes i programmet. Finaliseringsmetoden tilsidesættes her.
Kode:
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 ");
)
)
Produktion:
Eksempel 2
I nedenstående program kaldes færdiggørelsesmetoden internt, ingen eksplicit opkald kræves.
Kode
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 ");
)
)
Produktion:
Eksempel 3
I nedenstående program blev finaliseringen kaldt internt afhængigt af antallet af oprettede objekter.
Kode
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");
)
)
Produktion:
Eksempel 4
I nedenstående program oprettes to objekter, finaliseringen kaldes én gang, da begge objekter peger på det samme.
Kode:
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");
)
)
Produktion:
Eksempel 5
I nedenstående program kaldes den afsluttende metode to gange eksplicit og internt begge dele.
Kode
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 ");
)
)
Produktion:
Eksempel 6
I det nedenstående program er der en aritmetisk undtagelse, der kaldes i færdiggørelsesmetoden, som den eksplicit kaldes, hvilket yderligere forårsager undtagelsen og stopper udførelsen af det resterende program.
Kode:
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);
)
)
Produktion:
Eksempel 7
I det nedenstående program kaldes der ingen undtagelse, da det ikke kaldes eksplicit og fortsætter udførelsen af det resterende program.
Kode:
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);
)
)
Produktion:
Fordelene ved Destructor i Java
- Destruktoren ødelægger værdien, som konstruktøren skaber, til rummet i bunkehukommelsen.
- Destructor kaldes altid i slutningen af programmet.
- Destructor er aldrig overbelastet destructor tager ikke noget argument.
- Ingen grund til at definere vores konstruktør, kompilatoren skaber for os en.
Konklusion
Håber, at denne artikel var interessant og informativ både for dig at lære emnet. Denne givne artikel har dækket næsten alle de emner, du ser, og håber opfylder alle dine krav.
Anbefalede artikler
Dette har været en guide til Destructor i Java. Her har vi drøftet Definition af Destructor i Java, Hvordan fungerer destructor i java med metoder, fordele og forskellige eksempler. Du kan også gennemgå vores andre foreslåede artikel for at lære mere-
- Hvad er Java-interface?
- Hvad er Java-interface?
- Java-værktøjer
- Layout i Java
- Konstruktør og Destructor i Java
- Eksempler på Destructor i Python
- JRE vs JVM | Top 8 forskelle med (Infographics)
- Destruktor i PHP med eksempler