Inicjalizacja i sprzątanie

konstruktor, to pusta metoda o tej samej nazwie co klasa, w której się znajduje

przeciążanie metod – stosowanie tej samej nazwy metody parokrotnie w kodzie, z odmiennymi parametrami, bądź też wartością zwracaną

Gdy zdefiniujemy jakikolwiek konstruktor (z argumentami bądź bez), kompilator nie stworzy żadnego samodzielnie.

słowo kluczowe this służy do jawnego użycia referencji do aktualnego obiektu

W konstruktorze klasy można wywołać jeden inny konstruktor stosując this, nie można jednak wywołać dwóch. Ponadto wywołanie konstruktora musi być pierwszą rzeczą, którą robimy.
Kompilator nie pozwala na wywołanie konstruktora z wnętrza jakiejkolwiek metody nie będącej konstruktorem.

static – słowo kluczowe, odpowiadające za obiekty statyczne w kodzie, do których nie trzeba tworzyć nowej instancji obiektu

Sprzątanie w Javie, czyli: finalizacja i odśmiecanie pamięci (reguły):
1. Obiekty mogą nie zostać poddane odśmiecaniu.
2. Odśmiecanie pamięci to nie to samo co destrukcja obiektów.
3. Odśmiecanie dotyczy wyłącznie pamięci.

Metoda finalize()
// służy m.in.  do weryfikacji warunku zakończenia obiektu
System.gc() – jest natomiast używana do wymuszenia finalizacji

Przykład ze strony 160

Rozwiązanie ćwiczeń 10, 11
Rozwiązanie ćwiczenia 12

Jak działa odśmiecacz pamięci ?
sterta  – miejsce alokacji
model adaptacyjny – przystosowanie się
zatrzymaj i kopiuj (przenoszenie z jednej sterty na drugą)
zaznacz i zamieć (przesuwa znacznik do końca i zwalnia martwe obiekty)
licznik generacji (sprawdza czy blok jest “żywy”)
Just-In-Time (JIT) (zlokalizowany jest plik .class obiektu, a kod bajtowy klasy jest przenoszony do pamięci)
opóźniona ewaluacja (kod nie jest kompilowany przez JIT, dopóki nie jest to konieczne)
technologie Java HotSpot (optymalizacja fragmentu kodu za każdym razem, gdy jest on wykonywany)

Kolejność inicjalizacji – wewnątrz klasy jest wyznaczona przez kolejność definiowania zmiennych w danej klasie.
Zmienne są inicjowane zawsze zanim może zostać wywołana jakakolwiek metoda – nawet konstruktor. (definicje mogą być rozsiane po całym ciele klasy oraz między definicjami metod)

Inicjalizacja zmiennych statycznych:
1. Lokalizacja danej klasy poprzez przeszukiwanie ścieżki klas (classpath).
2. Po wczytaniu danej klasy zostają przeprowadzone wszystkie inicjalizacje statyczne.
Inicjalizacja statyczna występuje tylko raz.
// najpierw inicjalizowane są pola składowe statyczne
// nie można oznaczać słowem static zmiennych lokalnych

Przykład ze strony 169

Tablice – przykłady zastosowania:
int[] a1; = int a1[]; // indeksy tablicy zaczynają się od 0
a1.length()
Arrays.toString(a1)

Rozwiązanie ćwiczenia 16 ze strony 177
Rozwiązanie ćwiczenia 17

Rozwiązanie ćwiczenia 18

Przykład dynamicznej tablicy

Zmienna lista argumentów – oznaczana za pomocą trzykropka “…”:
f( Object obj){}
//kompilator samodzielnie montuje odpowiednią tablicę

obj.getClass() – metoda zwracająca nazwę klasy obiektu

przeciążona metoda – to taka, w której występuje różna liczba argumentów albo różnych typów argumentów

Rozwiązanie ćwiczenia 19 ze strony 182
Rozwiązanie ćwiczenia 20

Typy wyliczeniowe (enum):

public enum Spiceness{
NOT, MEDIUM, HOT
}
// trzeba tworzyć w oddzielnym pliku

Kompilator syntetyzuje metodę toString() oraz tworzy metody values(), ordinal()
//ordinal() – miejsce deklaracji
Zastosowanie m.in. do użycia w instrukcji wielokrotnego wyboru (switch).

Rozwiązania ćwiczeń 21, 22 ze strony 184 (łącznie z klasą Banknoty)