Wprowadzenie do Destructor w Javie

Destruktorów w Javie można nauczyć się metodą finalizacji w Javie. Koncepcja jest taka sama jak metoda finalizacji. Java działa dla wszystkich z wyjątkiem destruktora za pomocą Garbage collection. Dlatego w przypadku potrzeby wywołania destruktora można to zrobić za pomocą metody finalizacji. Ta metoda nie jest niezależna, ponieważ opiera się na Garbage Collection. Śmieciarka to wątek, który usuwa lub zniszczył nieużywany obiekt w obszarze sterty. Powiedz, jeśli obiekt jest podłączony do pliku lub powiedz jakieś aplikacje bazy danych lub połączenia sieciowe, przed usunięciem lub zniszczeniem obiektu musi zamknąć wszystkie połączenia związane z tymi zasobami, zanim nastąpi odśmiecanie. Zamykanie funkcji odbywa się poprzez wywołanie metody finalizacji.

Definicja Destructor w Javie

„Destructor to metoda wywoływana, gdy ma miejsce zniszczenie obiektu. „Głównym celem destruktora jest zwolnienie przydzielonej pamięci, a także oczyszczenie zasobów, takich jak zamykanie otwartych plików, zamykanie połączeń z bazą danych, zamykanie zasobów sieciowych itp.

Składnia

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

Jak działa Destructor w Javie?

Destruktor ma metodę finalize () w Javie, która jest podobna do destruktora w C ++. Po utworzeniu obiektów są one przechowywane w pamięci sterty. Są one dostępne przez wątki główne lub potomne. Kiedy te obiekty nie są już używane przez główny wątek lub jego wątki podrzędne, kwalifikują się one do odśmiecania, a pamięć, która została teraz uzyskana, staje się dostępna przez tworzenie nowych obiektów. Zanim obiekt zostanie wyrzucony przez śmietnik, JRE (Java Runtime Environment) wywołuje metodę finalize () w celu zamknięcia strumieni wejściowych i wyjściowych, połączeń z bazą danych, połączeń sieciowych itp. Należy pamiętać, że wywoływana metoda finalizacji jest chroniona. Dlaczego finalizacja jest chroniona, ponieważ może być wywołana przez klasę bazową lub pochodną? Metoda finalize jest obecna w klasie Object. Dlatego jeśli chcesz wywołać tę metodę finalizacji z innych obiektów, możesz zmienić tę chronioną na publiczną.

Składnia:

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

Metody finalizacji ()

  1. Metoda finalize () jest chroniona zgodnie z definicją w klasie java.lang.Object.
  2. Metoda finalize () jest wywoływana tylko raz.
  3. aby przesłonić metodę finalize (), musisz jawnie wywołać metodę finalize.
  4. GC () jest usługą JVM do wykonywania czyszczenia pamięci, jest wywoływana, gdy pamięć sterty jest pełna i potrzebuje pamięci dla nowo przybywających obiektów.
  5. JVM ignoruje wszystkie wyjątki oprócz niezaznaczonych wyjątków występujących w metodzie finalizacji.

Przykład 1

W poniższym programie zamiast metody finalizacji obecnej w programie wywoływana jest odpowiednia metoda finalizacji klasy String. Metoda finalizacji jest tutaj zastąpiona.

Kod:

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

Wynik:

Przykład nr 2

W poniższym programie metoda finalizacji jest wywoływana wewnętrznie, nie jest wymagane jawne wywołanie.

Kod

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

Wynik:

Przykład nr 3

W poniższym programie finalizacja została wywołana wewnętrznie w zależności od liczby utworzonych obiektów.

Kod

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

Wynik:

Przykład 4

W poniższym programie tworzone są dwa obiekty, finalizacja jest wywoływana jeden raz, ponieważ oba obiekty wskazują to samo.

Kod:

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

Wynik:

Przykład 5

W poniższym programie metoda finalizacji zostanie wywołana dwukrotnie jawnie i wewnętrznie.

Kod

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

Wynik:

Przykład nr 6

W poniższym programie istnieje wyjątek arytmetyczny wywoływany w metodzie finalizacji, ponieważ jest on jawnie wywoływany, co dodatkowo powoduje wyjątek i zatrzymuje wykonywanie pozostałego programu.

Kod:

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

Wynik:

Przykład nr 7

W poniższym programie nie ma żadnego wywoływanego wyjątku, ponieważ nie jest on wywoływany jawnie i kontynuuje wykonywanie pozostałego programu.

Kod:

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

Wynik:

Zalety Destructor w Javie

  1. Destruktor niszczy wartość utworzoną przez konstruktor w przestrzeni w pamięci sterty.
  2. Destructor jest zawsze wywoływany na końcu programu.
  3. Niszczyciel nigdy nie jest przeciążony niszczyciel nie przyjmuje żadnych argumentów.
  4. Nie ma potrzeby definiowania naszego konstruktora, kompilator tworzy dla nas jeden.

Wniosek

Mam nadzieję, że ten artykuł był interesujący i pouczający zarówno dla Ciebie, jak i dla tego tematu. W tym artykule omówiono prawie wszystkie tematy, których szukasz, a nadzieja spełnia wszystkie Twoje wymagania.

Polecane artykuły

To był przewodnik po Destructor w Javie. Omówiliśmy tutaj definicję destruktora w Javie, w jaki sposób działa destruktor w Javie z metodami, zaletami i różnymi przykładami. Możesz także przeczytać nasz inny sugerowany artykuł, aby dowiedzieć się więcej-

  1. Co to jest interfejs Java?
  2. Co to jest interfejs Java?
  3. Narzędzia Java
  4. Układ w Javie
  5. Constructor and Destructor w Javie
  6. Przykłady Destructor w Pythonie
  7. JRE vs JVM | 8 najważniejszych różnic z (Infografika)
  8. Destructor w PHP z przykładami