Inicjalizacja i sprzątanie

23
Inicjalizacja i sprzątanie Wykonał: Marcin Ganczarek 140544

description

Inicjalizacja i sprzątanie. Wykonał: Marcin Ganczarek 140544. Plan. Gwarantowana inicjalizacja przez konstruktor Przeciążanie metod Sprzątanie: finalizacja i odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic. Plan. Gwarantowana inicjalizacja przez konstruktor - PowerPoint PPT Presentation

Transcript of Inicjalizacja i sprzątanie

Page 1: Inicjalizacja i sprzątanie

Inicjalizacja i sprzątanie

Wykonał:Marcin Ganczarek 140544

Page 2: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 3: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 4: Inicjalizacja i sprzątanie

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

Page 5: Inicjalizacja i sprzątanie

Gwarantowana inicjalizacja przez

konstruktor

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

Proste przykłady klas z konstruktorem

Page 6: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 7: Inicjalizacja i sprzątanie

Przeciążanie metod

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

Przykład klasy z przeciążonymi metodami

Page 8: Inicjalizacja i sprzątanie

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

}

}

Page 9: Inicjalizacja i sprzątanie

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

Page 10: Inicjalizacja i sprzątanie

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

Page 11: Inicjalizacja i sprzątanie

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

Page 12: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 13: Inicjalizacja i sprzątanie

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

Page 14: Inicjalizacja i sprzątanie

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

Page 15: Inicjalizacja i sprzątanie

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

Page 16: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 17: Inicjalizacja i sprzątanie

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();// …}

Page 18: Inicjalizacja i sprzątanie

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

Page 19: Inicjalizacja i sprzątanie

Plan

Gwarantowana inicjalizacja przez konstruktor

Przeciążanie metod Sprzątanie: finalizacja i

odśmiecanie pamięci Inicjalizacja składowych Inicjalizacja tablic

Page 20: Inicjalizacja i sprzątanie

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]

Page 21: Inicjalizacja i sprzątanie

Inicjalizacja tablicTablica 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))

Page 22: Inicjalizacja i sprzątanie

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), },

};

Page 23: Inicjalizacja i sprzątanie

KONIEC