Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Inicjalizacja i sprzątanie

Podobne prezentacje


Prezentacja na temat: "Inicjalizacja i sprzątanie"— Zapis prezentacji:

1 Inicjalizacja i sprzątanie
Wykonał: Marcin Ganczarek

2 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

3 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

4 Gwarantowana inicjalizacja przez konstruktor
W Javie pojęcia tworzenia i inicjalizacji obiektu połączono Do tworzenia i inicjalizacji obiektu służy specjalna metoda nazwana konstruktorem Konstruktor nie zwraca żadnej wartości i nie można tego zmienić Jeżeli napiszemy klasę bez konstruktora to kompilator automatycznie utworzy konstruktor domyślny za nas Konstruktor domyślny to konstruktor nie pobierający żadnych argumentów

5 Gwarantowana inicjalizacja przez konstruktor
Proste przykłady klas z konstruktorem 1. Konstruktor bez argumentów class Ala { Ala() System.out.println(”Ala ma kota”); } 2. Konstruktor z argumentami class Ola { Ola (int i) System.out.println(”Ola ma” + i + ”kotów”); }

6 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

7 Przykład klasy z przeciążonymi metodami
Przeciążanie metod Przykład klasy z przeciążonymi metodami class Drzewo { int wysokość; Drzewo() { System.out.println(”Zasadzenie ziarna”); wysokość = 0; } Drzewo(int i) { System.out.println(”Stworzenie drzewa o wysokości ” + i + ”metrów”); wysokość = i; void info() { System.out.println(”Wysokość drzewa to ” + wysokość + ”metrów”); void info(String s) { System.out.println(s + ”: Wysokość drzewa to ” + wysokość + ”metrów”);

8 Przeciążanie metod Każda przeciążona metoda musi posiadać unikatową listę typów argumentów Nie można użyć typu wartości zwracanej do odróżnienia metod przeciążonych Różnica w kolejności argumentów jest wystarczająca, aby odróżnić dwie metody class Student { Student(String s, int i) { System.out.println(s + ” otrzymał ocenę ” + i); } Student(int i, String s) { System.out.println(i + ” to ocena ” + s);

9 Przeciążanie metod Słowo kluczowe this – zwraca odwołanie do obiektu, na rzecz którego metoda została wywołana. Może być stosowane tylko wewnątrz metody Wywołując metodę klasy z wnętrza innej metody tej klasy, nie ma potrzeby używania this this jest wykorzystywane tylko w przypadkach, kiedy trzeba jawnie użyć odwołania do aktualnego obiektu Słowo kluczowe this umożliwia nam wywoływać jeden konstruktor z drugiego

10 Przeciążanie metod Wywołanie konstruktora za pomocą this musi być pierwszą rzeczą, którą robimy Stosując słowo kluczowe this można wywołać tylko jeden konstruktor Za pomocą this nie można wywołać konstruktora z wnętrza jakiejkolwiek metody nie będącej konstruktorem

11 Przykład wywoływania konstruktora z konstruktora
Przeciążanie metod Przykład wywoływania konstruktora z konstruktora class pies { pies(int i) { System.out.println(”Mam ” + i + ” psów”); } pies(String s) { this(i); System.out.println(s + ” ma psa”); pies(String s, int i) { this(s); System.out.println(s + ” ma ” + i + ” psów”);

12 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

13 Sprzątanie: finalizacja i odśmiecanie pamięci
Różnice między Java a C++ Java nie pozwala na tworzenie obiektów lokalnych Java nie posiada destruktorów W C++ obiekty zawsze są niszczone, podczas gdy w Javie obiekty nie zawsze ulegają odśmiecaniu Podsumowując W Javie: Obiekty mogą nie zostać poddane odśmiecaniu Odśmiecanie pamięci to nie destrukcja Odśmiecanie dotyczy wyłącznie pamięci

14 Sprzątanie: finalizacja i odśmiecanie pamięci
Do zwalniania pamięci w Javie stosuje się metody finalize() i odśmiecacz pamięci Metodę finalize() definiuje się we własnej klasie i wykorzystuje się ją przeważnie w przypadkach, w których obiekt może alokować pamięć inaczej niż poprzez stworzenie obiektu Metodę finalize() stosuje się także do weryfikacji warunku zakończenia obiektu Finalizacja i odśmiecanie nie są zagwarantowane

15 Sprzątanie: finalizacja i odśmiecanie pamięci
Różne sposoby pracy różnych odśmiecaczy Zliczanie referencji Odśmiecacze kopiujące Adaptacyjny model odśmiecania ”Przyśpieszacze” JVM Ładowacz klas (ang. loader) Kompilator Just-In-Time (JIT) Technologie Java HotSpot

16 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

17 Inicjalizacja składowych
W Javie w porównaniu do C++ pozwala na przypisanie wartości w miejscu definicji zmiennej wewnątrz klasy Można wywołać metodę żeby była wartością początkową pod warunkiem, że metoda taka może posiadać argumenty , które już zostały zainicjalizowanymi składowymi klasy Tak można napisać class A { int i = f(); int j = g(i); // … } Tak nie można napisać class A { int j = g(i); int i = f(); // … }

18 Inicjalizacja składowych
Do przeprowadzenia inicjalizacji można wykorzystać konstruktor Kolejność inicjalizacji wewnątrz klasy jest wyznaczona przez kolejność definiowania zmiennych w danej klasie Jeżeli zmienna typu podstawowego (boolean, char, byte, short, int, long, float, double, void) jest składową klasy to ma zapewnioną domyślną wartość początkową Zmienne definiowane jako static mają taką samą inicjalizacje jak w przypadku zmiennych nie będących statycznymi. Inicjalizacja statyczna występuje tylko raz wtedy , gdy jest potrzebna

19 Plan Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod
Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

20 Inicjalizacja tablic W Javie tablice można zdefiniować w następujący sposób int[] a1; albo int a1[] Tablica jest ciągiem obiektów albo zmiennych typu podstawowego, wszystkich tego samego typu, zebranych pod wspólną nazwą Przy definiowaniu tablicy nie można ustalić jej wielkości. Aby stworzyć obszar dla tablicy trzeba użyć wyrażenia inicjalizującego Tablice posiadają własną składową lenght mówiącą ile jest elementów w tablicy Tablice można zainicjalizować w następujący sposób int[] a1 = {1, 2, 3}; albo int[] a1 = new int[20]

21 Inicjalizacja tablic Tablica obiektów
Przy tablicach obiektów po wpisaniu komendy Obiekty[] a = new Obiekty[rand.nextInt(20)] W celu utworzenia tablicy, inicjalizacja nie jest kompletna, gdyż otrzymamy tylko tablice referencji, dopóki same referencje nie zostaną zainicjalizowane przez stworzenie nowych obiektów typu Obiekty a[i] = new Obiekty(rand.nextInt(4))

22 Inicjalizacja tablic Tworzenie tablic wielowymiarowych
int[][] a1 = { {1, 2, 3, }, {4, 5, 6, }, }; int[][][] a2 = new int[2][2][4]; Tworzenie tablicy wielowymiarowej obiektów Integer[][] a3 ={ { new Integer(1), new Integer(2), }, { new Integer(3), new Integer(4), }, { new Integer(5), new Integer(6), }, };

23 KONIEC


Pobierz ppt "Inicjalizacja i sprzątanie"

Podobne prezentacje


Reklamy Google