1 Język Java Paweł Rajba [email protected]
2 O czym dzisiaj będzie Struktura programu Klasy Pola, metodyZasięg identyfikatorów i specyfikatory dostępu Konstruktory i tworzenie obiektów Komunikacja z obiektami Statyczne składowe klasy Pakiety
3 Struktura programu package ... // deklaracja pakietu (niekoniecznie)import // deklaracja importów (często przydatne) import ... public class A { ... } class B class C
4 Struktura programu Ograniczeniaw jednym pliku źródłowym może być tylko jedna klasa publiczna klasa publiczna musi dokładnie taką samą nazwę jak nazwa pliku (z dokładnością do małych i wielkich liter) Początek wykonywania programu metoda statyczna public static void main(String[] args) { } w jednej z klas (niekoniecznie publicznej)
5 Klasy Co to jest klasa? Składowe pola: zmienne i stałe, dane obiektumetody: funkcje, operują na danych obiektu Przykład klasy class Samochod { String marka, model, nr_rej, kolor; int rocznik; rejestruj() {} wyrejestruj() {} jedz() {} stoj() {} wlacz_swiatla() {} wylacz_swiatla() {} }
6 Pola i metody Deklaracja metod typ_wyniku Nazwa(lista_parametrów) { treść metody... } int suma(int x, int y) { return x+y; } Zestaw metod klasy nazywamy interfejsem tej klasy
7 Pola i metody Przykazywanie argumentówargumenty do metod przekazywane są tylko przez wartość Przykład: void dodajeden(int x) { x; } z=0; dodajeden(z); // i tutaj nadal z==0
8 Zasięg identyfikatorówZasięg identyfikatora (zmiennej, stałej, metody) jest blok, którym jest on dostępny W konstruktorach i metodach można przesłaniać pola klasy class A { int x=10; void zrobcos() { int x=0; // dotyczy zmiennej lokalnej x+=1; // dotyczy zmiennej lokalnej this.x; // dotyczy pola klasy } }
9 Zasięg identyfikatorówNie wolno przesłaniać zmiennych lokalnych w blokach wewnętrznych int x=0; if (x==0) { int x=5; // tak nie wolno } int i=0; for (int i; i<10; i++) { ... } // tak też nie wolno
10 Specyfikatory dostępuRegulują dostęp do pól i metod jednej klasy z innej klasy prywatna – dostępna tylko w danej klasie; specyfikator private zaprzyjaźniona – dostępna ze wszytkich klas danego pakietu; domyślna, bez specyfikatora chroniona lub zabezpieczona – dostępna z danej klasy i wszystkich jej klas potomnych; specyfikator protected publiczna – dostępna ze wszystkich klas; specyfikator public
11 Konstruktory Konstruktor uruchamiany raz przy tworzeniu obiektunie zwraca żadnej wartości jego nazwa jest taka jak nazwa klasy Przykład class LZespolona { double re, im; LZespolona(double x, double y) { re=x; im=y; } void Pokaz() { ... } }
12 Tworzenie obiektów Obiekt tworzymy za pomocą operatora newPierwsze użycie: NazwaKlasy nazwaobiektu = new NazwaKlasy(argumentu); Drugie użycie: NazwaKlasy nazwaobiektu; nazwaobiektu = new NazwaKlasy(argumentu)
13 Tworzenie obiektów Inicjalizacja pól Zasady Domyślne inicjalizacjekażde odwołanie do klasy inicjuje najpierw pola statyczne tworzenie obiektu inicjuje pola niestatyczne, a następnie wykonywany jest konstruktor najpierw inicjowane są pola statyczne, a potem niestatyczne; wg kolejności deklaracji Domyślne inicjalizacje pola klasy mają zagwarantowane na wartości 0 zmienne lokalne nie mają zagwarantowanej domyślnej inicjalizacji pól
14 Tworzenie obiektów Przykład class LZespolona { double re, im; LZespolona(double x, double y) { re=x; im=y; } } LZespolona z1 = new LZespolona(1,2); LZespolona z2 = new LZespolona(3,4); Dostępne są dwie liczby: (1,2) i (3,4)
15 Komunikacja z obiektamiOperowanie na obiektach dostęp do pól i metod jest przez operator . przykłady z1.re, z1.pokaz() Słowo kluczowe this znaczenie przyklad class LZespolona { double re, im; LZespolona(double re, double im) { this.re=re; this.im=im; } }
16 Klasy i obiekty Przykład 1 class ParaLiczb { int x, y; ParaLiczb(int x, int y) { this.x=x; this.y=y; } void Pokaz() { System.out.println(this.x+", "+this.y); } int Suma() { return x+y; } int Iloczyn() { return x*y; } }
17 Klasy i obiekty Przykład 1 c.d. public class Przyklad1 { public static void main(String[] args) { ParaLiczb p1 = new ParaLiczb(1,2); ParaLiczb p2 = new ParaLiczb(4,5); System.out.print("Dana jest para: "); p1.Pokaz(); System.out.println("Suma: "+p1.Suma()); System.out.println("Iloczyn: "+p1.Iloczyn()); System.out.print("Dana jest druga para: "); p2.Pokaz(); System.out.println("Suma: "+p2.Suma()); System.out.println("Iloczyn: "+p2.Iloczyn()); } }
18 Klasy i obiekty Przykład 2 class Punkt { double x, y; Punkt(double x, double y) { this.x=x; this.y=y; } double Odleglosc(Punkt p) { return Math.sqrt((this.x-p.x)*(this.x-p.x) (this.y-p.y)*(this.y-p.y)); } }
19 Klasy i obiekty Przykład 2 c.d. public class Przyklad2 { public static void main(String[] args) { Punkt p1 = new Punkt(1,2); Punkt p2 = new Punkt(5,5); System.out.println("Odleglosc p1 od p2: " p1.Odleglosc(p2)); System.out.println("Odleglosc p2 od p1: " p2.Odleglosc(p1)); } }
20 Klasy i obiekty Przykład 3 class Punkt { double x, y; Punkt(double x, double y) { this.x=x; this.y=y; } double odleglosc(Punkt p) { return Math.sqrt((this.x-p.x)*(this.x-p.x) (this.y-p.y)*(this.y-p.y)); } }
21 Klasy i obiekty Przykład 3 c.d. public class Przyklad3 { public static void main(String[] args) { Punkt[] t = new Punkt[3]; Punkt p = new Punkt(3,5); double odl = 0.0; t[0] = new Punkt(2,7); t[1] = new Punkt(4,5); t[2] = new Punkt(2,6); for (int i=0; i
22 Statyczne składowe klasyCo to znaczy, że coś w klasie jest statyczne? Deklaracja dodanie specyfikatora static Użycie dwa przypadki gdy obiekt nie istnieje: NazwaKlasy.NazwaSkładowej gdy obiekt istnieje, tak samo jak dla niestatycznych ze statycznych metod nie wolno odwoływać się do składowych niestatycznych (mogą nie istnieć)
23 Statyczne składowe klasyTypowy przykład class Punkt { static int ilosc=0; // pole statyczne double x, y; Punkt(double x, double y) { ilosc++; this.x=x; this.y=y; } double odleglosc(Punkt p) { return Math.sqrt((this.x-p.x)*(this.x-p.x) (this.y-p.y)*(this.y-p.y)); } }
24 Statyczne składowe klasyTypowy przykład c.d. public class Przyklad4 { public static void main(String[] args) { Punkt[] t = new Punkt[10]; for (int i=0; i<5; i++) { t[i] = new Punkt(i,i); } System.out.println(Punkt.ilosc); System.out.println(t[0].ilosc); } }
25 Pakiety Kilka uwag pakiety możemy rozpatrywać jako biblioteki klaskażda klasa należy do jakiegoś pakietu (nazwanego lub nienazwanego) pakiety są zorganizowane hierarchicznie co daje możliwość organizowania klas w pakiety możemy grupować klasy unikamy konfliktów nazw (np. może być kilka klas Button, List, itp.) nazwy kwalifikowane nazwa_pakietu.nazwa_klasy polecenie import (np. import java.awt.Button)
26 Pakiety Przykład 1 tworzymy plik przyklad1.java katalog toolsplik tools/LZespolona.java
27 Pakiety Przyklad 1 c.d. zawartość pliku tools/LZespolona.javapackage tools; public class LZespolona { public double re, im; public LZespolona(double x, double y) { re=x; im=y; } public LZespolona add(LZespolona z) { return new LZespolona(this.re+z.re, this.im+z.im);
28 Pakiety Przykład 1 c.d. zawartość pliku Przyklad1.javaimport tools.LZespolona; public class Program01 { static void wypisz(LZespolona z) { System.out.println(z.re+"+"+z.im+"i"); } public static void main(String[] args) { LZespolona z1 = new LZespolona(1,1); LZespolona z2 = new LZespolona(2,3); LZespolona z3 = z1.add(z2); wypisz(z1); wypisz(z2); wypisz(z3);
29 Ćwiczenie 1 Rozszerzyć klasę ParaLiczb o następujące metody Roznica()Iloraz() Należy przy tym pamiętać, aby nie dopuścić do dzielenia przez 0.
30 Ćwiczenie 2 Rozszerzyć klasę LZespolona z pakietu tools o operacjęodejmowania mnożenia liczb zespolonych