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