Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek...

131
Java – wstęp do języka Andrzej Chybicki [email protected] Pok. 738

Transcript of Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek...

Page 1: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Java– wstęp do języka

Andrzej Chybicki

[email protected]

Pok. 738

Page 2: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

To co już powinniśmy wiedzieć…

• Składnia, gramatyka i doświadczenie w programowaniu w C/C++

• Idea i zasada programowania obiektowego (C++) (klasy, zmienne)

• Podstawowe mechanizmy dziedziczenia

• Zakładam, że student nie napisałżadnej aplikacji w języku Java – java od podstaw

Page 3: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

HistoriaJavy

• Początki języka Java sięgają roku 1990, gdy Bill Joynapisał dokument pod tytułem “Further”, w którym sugerował inżynieromSun Microsystems stworzenie obiektowego środowiska w oparciu o C++. Dokument ten miał pewien wpływ na twórców projektu Green (James Gosling, Patrick Naughton i Mike Sheridan). W roku 1991 w ramach projektu Green opracowano w języku C kompilator oraz interpretator wynalezionego przez Goslinga języka OAK (Object Application Kernel), który miał być narzędziem do oprogramowania “inteligentnych”konsumenckich urządzeń elektronicznych. Ponieważnazwa “OAK” okazała się zastrzeżona, zmieniono ją na “Java”.

Page 4: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Java– język czy coś więcej?

• Java oczywiście jest językiem programowania, lecz w praktyce na Javę

składają się inne elementy funkcjonalne:1. Kompilator

2. Maszyna wirtualna „Java” (JVM).

3. Biblioteki języka Java

4. Obiektowy język programowania bazujący na składni języka C++

Page 5: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

1.Kompilator

• Kompilator który przetwarza program “nazwa.java” na tak zwany B-kod (bytecode, J-code), zapisywany automatycznie w plikach z rozszerzeniem nazwy “.class”. B-kod jest przenośną postacią programu, która może byćzinterpretowana przez odpowiedniąmaszynęwirtualną, to jest “urządzenie logiczne”, na którym będzie wykonywany program binarny

Page 6: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

2. Maszyna wirtualnaJavy(ang. JVM – Java Virtual Machine)

• JVM można uważać za abstrakcyjny komputer, który wykonuje programy, zapisane w plikach z rozszerzeniem nazwy “.class”. Maszyna wirtualna może być implementowana na rzeczywistych komputerach na wiele sposobów, na przykład jako interpretator wbudowany w przeglądarkęWWW (np. Netscape), lub jako oddzielny program, który interpretuje pliki “nazwa.class”. Może to być także implementacja polegająca na przekształceniu tuż przed rozpoczęciem fazy wykonania pliku z B-kodem na program wykonalny, specyficzny dla danej maszyny. Mechanizm ten można określić jako tworzenie kodu wykonalnego w locie (ang. Just-In-Time, np. kompilator JIT firmy Symantec). Interpretatory B-kodu, tj. różne maszyny wirtualne, są także często napisane w języku Java.

Page 7: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

JVM

• JVM nie jest osobnąmaszyną w sensie sprzętowym, lecz w sensie programowym

• Można powiedzieć, że JVM jest nakładkąna system umożliwiającą kompilowanie i wykonywanie aplikacji Java.

• JVM a szybkość… inicjalizacja i kompilowanie JIST

Page 8: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

JVM a OS

Page 9: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

PC - Windows XP/NT SUN - Solaris

MyProgram.javaEdytor Kompilator

Interpretator InterpretatorMyProgram.class

Javaa niezależność sprzętowo-programowa

Page 10: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Język Java

• Oparty o składnię C++• Prawdziwie obiektowy (tylko obiektowy!! )• Podział na klasy• Jedna klasa główna – metoda „main”, która

stanowi „wejście” do programu• Program w języku „Java” nazywa się

aplikacją (samodzielna) lub applet(aplikacja sieciowa)

Page 11: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

AplikacjeJava• Warunek uruchomienia: zainstalowanie na

komputerze JDK (Java Developement Kit) lub JRE (ang.Java Runtime Enviroment).

• Każda aplikacja musi zawierać dokładnie jeden modułźródłowy nazywany modułem głównym aplikacji zawierającym definicje klas, w którym jedna z klas zawiera publiczną funkcję klasy (funkcje takie są poprzedzane słowem kluczowym static) main.

• Funkcje w języku Java są zawsze własnością klas lub obiektów i nazywa się je metodami (ang. methods)

Page 12: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• Plik który zawiera metodąmain jest „wejściem” do aplikacji Java. Musi on posiadać tę samą nazwę co nazwa klasy, która posiada metodęmain.

• Aplikacja składająca się z wielu pakietów (modułów) i klas może posiadać kilka klas z metodą „main”.

• Metoda main musi być publiczna i statyczna – public static void main(String args[])

• Przykładowy program wygląda następująco:

Page 13: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 14: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Kompilacja i uruchomienie aplikacjiJava

• Kompilacja programu:javac Hello.java , o ile mamy prawidłowo ścieżkę ustaloną do javac

• Udana kompilacja wygeneruje plik z B-kodem o nazwie Hello.class, zawierający sekwencjęinstrukcji dla interpretatora JVM. Kod ten wykonujemy przez wywołanie interpretatora o nazwie java poleceniem:

java Hello

Page 15: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Omówienie przykladu

• Interpretator wyszuka plik o nazwie Hello.class, ustali, czy klasa Hello zawiera publicznąmetodęstatycznąmain i wykona instrukcje zawarte w bloku main.

• Nie ma wielkości globalnych: wszystkie zmienne i stale są własnością klas lub obiektów.

• Wartością parametru arg[0] jest pierwszy po nazwie programu spójny ciąg znaków

Page 16: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Konsola wJavie– klasa system• Klasa Systemzawiera statyczny obiekt składowy typu

PrintStreamo nazwieout; wywołanie System.outoznacza pisanie do standardowego strumienia wyjściowego. Klasa PrintStreamzawiera szereg przeciążeńmetody o nazwie print; jedno z nich przyjmuje parametr typu String. Kompilator automatycznie tłumaczy literał stały Hello, World\n na odpowiedni obiekt klasy String; odnośnik (referencja) do tego obiektu jest przekazywana do metody System.out.print(). Metoda print() generuje jeden wiersz wyjściowy i powraca do metody main, która kończy wykonanie programu.

• Standardowe wyjście z poziomu programu wygląda tak samo : System.out.* niezależnie od systemu i sposobu uruchomienia programu .

Page 17: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Identyfikatory i znaki specjalne

• Słowa zarezerwowane (true, false, if , switch, case…) – bazujące zasadniczo na składni C/C++

• Słowa kluczowe (abstract, final) – można używać tylko w ściśle określonym kontekście

Page 18: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Zastrzeżone słowa wJava

transientshortinterfaceFinallyclass

throwsreturnintFinalChar

throwpublicinstanceofExtendscatch

thisprotectedimportElseCase

synchronizedprivateimplementsDoubleByte

whileswitchpackageifDobreak

volatilesupernewgoto*Defaultboolean

voidstrictfp**nativeforContinueassert

trystaticlongfloatconst*abstract

Page 19: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Klasy wJavie

Definicja klasy ma postać:

Deklaracja klasy

{

Ciało klasy

}

Page 20: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Klasy

• Słowo kluczowe class można poprzedzić slowami: abstract, public, final

• Po słowie class można umieścić wyrażenia:• ‘extends nazwa_superklasy’ oraz ‘implements

nazwy_interfejsów’• Mechanizm dziedziczenia już omówiliśmy • Mechanizm interfejsów wJavie dopiero

omówimy.• Java nie umożliwia wielodziedziczenia ale można

to zrobić używając mechanizmów interfejsów

Page 21: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

KlasaObject

• � Uwaga. W języku Java każda klasa dziedziczy od predefiniowanej klasyObject. Zatem, jeżeli w definicji klasy nie występuje fraza extends, to jest to równoważne niejawnemu wystąpieniu w tej definicji frazy ‘extends Object’

Page 22: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• protected Objectclone()• booleanequals(Object obj) • void finalize() • ClassgetClass() • Int hashCode() • void notify () • void notifyAll () • StringtoString() • void wait() • void wait (long timeout)

Page 23: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Zmienne klasy

• Zmienne klasy (statyczne, tj. poprzedzone słowem kluczowym static), konstruktor i metody oraz funkcje klasy (statyczne) także są poprzedzanie słowem static.

• Nazwa każdej zmiennej składowej, zmiennej klasy, metody lub funkcji klasy musi byćpoprzedzona nazwą typu (np. boolean, double,char, float, int, long, void).

• Zmienne i metody statyczne są traktowane analogicznie jak w C++

Page 24: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Dostęp do zmiennych i metod klasy

• private

• protected

• public

• niezdefiniowany

Page 25: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Zmienne i metody

• Zmienne i metody typu static – przypomnienie

• Zmienne i metody final– Zmienne ,która nie może być modyfikowana

– Metoda, która nie może redefiniowana w klasach dziedziczących

– Klasa po której nie można dziedziczyć

– Lokalne zmienne finalne, które zostały zadeklarowane, ale jeszcze nie zainicjowane, nazywa się blank final.

Page 26: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Słowa kluczowe this i super

• Dostęp do elementów klasy uzyskuje się za pomocą operatora kropkowego. Jeżeli element danej klasy (zmienna lub metoda) przesłania (overrides) jakiś element swojej superklasy, to można się do niego odwołaćza pomocą słowa kluczowego super, jak w poniższym przykładzie

• Spójrzmy na przykład:

Page 27: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 28: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Omówienie przykładu

• ASillyClass oob;• oob = new ASillyClass();• Większość klas (wbudowanych lub

definiowanych przez użytkownika) inicjalizujemy za pomocą operatora new

• Do kontrolowania ilości obiektów danej klasy czasami są używane tzw. Fabryki obiektów.

Page 29: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Konstruktoryw Javie

• Konstruktory w Javie definiujemy analogicznie jak w C++. Konstruktor musi być zawsze jawny i zwracać obiekt klasy w jakiej jest inicjowany.

• W javie nie ma destruktorów obiektów– Wady– Zalety

• „Utylizacją” nieużywanych obiektów wJavazajmuje się mechanizm „Garbage collector” –omówimy go później

Page 30: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Konstruktoryw Javie

• Jeżeli dana klasa nie zawiera deklaracji konstruktorów, to kompilator dostarcza konstruktor domyślny z pustym wykazem argumentów, który w swoim bloku wywołuje konstruktor super()jej bezpośredniej nadklasy. Weźmy dla ilustracji definicję klasy Point:public class Point { int x, ,y; }

• Jest ona równoważna definicjipublic class Point { int x, ,y; public Point() { super(); } }z niejawnym wywołaniem dostarczanego przez kompilator konstruktora superklasy, od której bezpośrednio dziedziczy klasa Point.

Page 31: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Dostęp do metod i pól superklasy(klasy bazowej)

• Odwołanie się do pól i metod superklasy odbywa się poprzez słowo kluczowe super.

• Czasami ważne jest mieć pewność ze odwołujemy się do pól i metod obiektu w którym aktualnie jesteśmy – w takim przypadku używamy słowa kluczowego this

• Operator this zawsze zwraca obiekt w którym znajduje się aktualnie wykonana instrukcja.

Page 32: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Niejawne wywoływania konstruktorów superklasy

• Spójrzmy na przykład:

Page 33: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 34: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Konstruktor super() może byćrównież wywoływany jawnie

• Spójrzmy na przykład

Page 35: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 36: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Konstruktory– this(…) i super(…)

• Uwaga. instrukcjathis(argumenty); musi być pierwszą instrukcją w ciele konstruktora lub metody; to samo dotyczy instrukcji super(argumenty);.

Page 37: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Sprzątanie obiektów wJava

• Inicjalizacja obiektów występuje zawsze kiedy chcemy ich użyć – co do tego każdy programista jest świadomy

• Garbage Collector- gc (odśmiecaczpamięci) automatycznie pozbywa sięobiektów nieużywanych – ale nie zawsze powoduje zwolnienie całej pamięci wykorzystywanej przez te obiekty

Page 38: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Szczególny przypadek

• Odśmiecacz zwalnia tylko pamięćzalokowaną przez obiekt z wykorzystaniem operatora new

• Jeśli obiekt w inny sposób alokuje pamięćodśmiecacz może sobie nie dać rady

• Rozwiązanie – metoda finalize()

Page 39: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Używamy metody finalize()

• Jeżeli obiekt posiada metoda finalize() to odśmiecacz będąc gotowy do zwolnienia obiektu najpierw wywoła metodę finalize()

• Dopiero przy kolejnym odśmiecaniu zażąda zwrotu pamięci samego obiektu

• Zdefiniowanie metody finalize() leży w gestii użytkownika!!

Page 40: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Finalize() a destruktory C++

• Finalize() i destruktory C++ to nie to samo!!• C++ - destruktor zawsze niszczy obiekt• Finalize powoduje jedynie zwolnienie ewentualnej

pamięci lub uchwyty do pliku, zasobu sieciowego – ale nie niszczy obiektu

• Kiedy i jak używamy finalize()? • Używamy przed zniszczeniem obiektu, aby

ewentualne zasoby związane z obiektem których gc nie wyczyści samemu zwolnić

• Spójrzmy na przykład:

Page 41: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wywolaniefinalize()

Page 42: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wynik

Tytul ksiazki

Finalizujemy obiekt przy index = 3

W powyższym przykładzie ręcznie uruchomiliśmy gc , ale JVM automatycznie uruchamia gc w przypadku alokacji lub zwalniania dużej ilości zasobów

Page 43: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Zasada działania gc

• Zasada działania sterty w C++ - plac w którym poszczególne obiekty zajmująpamięć (powierzchnię) potrzebną im do życia

• W Java stertęmożna porównać do przesuwającej się taśmy, w której każdy nowy obiekt alokuje nową część taśmy – co powoduje szybkie wyczerpanie pamięci

Page 44: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Sztuczki w gc– mechanizmy oszczędzania pamięci

• Gc podczas „zbierania śmieci” porządkuje obiekty w obszar ciągły przesuwając wskaźnik taśmy.

• Są różne techniki odśmiecania , które obiekty wyrzucać, które zostawiać, jak to sprawdzać?

• Liczenie referencji• Zliczanie odwołań

Page 45: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablice wJava

• Każda tablica wJava jest obiektem

• Dynamicznie tworzona – nie ma problemu zarządzania pamięcią (wyręcza nas w tym kompilator i JVM)

• Zmienna prezentująca tablicę jest tak naprawdę referencją do pamięci pierwszego z elementów tablicy (jak w C/C++)

Page 46: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablice – ciąg dalszy

• Obiekty lub składowe tablicy nazywa się elementami• Każdy obiekt tablicowy zawiera pole length zawierający

ilość elementów w tablicy• Elementy są numerowane od 0• Niezainicjowane (ale zadeklarowane!!) elementy tablicy

mają inicjalną wartość = 0• Elementami tablic mogą być typy proste (int, float ,

double) oraz typy złożone (obiekty – nie klasy), null’e, • Tablice mogą być inicjowane jako tablice elementów klasy

abstrakcyjnej pod warunkiem… no właśnie - jakim warunkiem??

Page 47: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

I jeszcze parę istotnych uwag o tablicach

• Semantyka :• Deklaracja nośnika tablicy:

int[] tab;• Zainicjowane

tab = new int[3];• Albo od razu:

int[] tab = new int[3];• Inny sposób:

int[] tab = {0, 0, 0 };• Spójrzmy na przykład:

Page 48: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 49: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wynik i dyskusja

ia[0] = 1ia[1] = 2ia[2] = 3da[0] = 1.3da[1] = 2.5da[2] = 3.4Klasa obiektu ia: class [IKlasa obiektu da: class [Dclass java.lang.Object

Page 50: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Drobna uwaga

• Dla tablicy wielowymiarowej sygnatura byłaby poprzedzona odpowiednią liczbąnawiasów prostokątnych. Np. instrukcja

• System.out.println("Klasa obiektu: "+(newfloat [3][4][5]).getClass());

da wydruk:

• Klasa obiektu: class [[[F

Page 51: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablica typów zdefiniowanych przez użytkownika

• W Javie elementami tablic mogą byćzarówno typy proste jak i obiekty klas wbudowanych i zdefiniowanych przez użytkownika.

• Spójrzmy na przykład:

Page 52: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 53: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

W wyniku działania programu otrzymujemy

mytab[0].x = 20

mytab[1].x = 21

mytab[2].x = 22

mytab jest obiektem typu MyClass[].

class [LMyClass

class java.lang.Object

Page 54: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablice wielowymiarowe

• Tablice mogą zawierać elementy dowolnego typu a więc i także tablice, które składają się tez z tablic tablic obiektów etc, etc, - wniosek:

• W Java też można tworzyć tablice wielowymiarowe

• Odwoływanie się do elementów tablic analogicznie jak w C++

• Przykład tablicy wielowymiarowej

Page 55: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 56: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablice wielowymiarowe wJava-cd

int[][] tab = { {1,2,3}, {4,5,6} };

for(int row=0; row < 2; row++) {

for(int col=0; col < 3; col++) {

System.out.println(tab[row][col]);

}

}

Page 57: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Tablice a kolekcje obiektów

• Każdy program musi przechowywać określonąilość obiektów.

• Tablice są jednym ze sposobów przetrzymywania dużej ilości obiektów

• Tablica jest wJava najbardziej efektywnym sposobem przechowywania REFERENCJI do dużej ilości obiektów

• No ale co z wygodą? (Przeszukiwanie, wydobywanie, zwiększanie, kopiowanie itp. , itp.)

• Rozwiązanie – klasy kontenerowe

Page 58: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Klasy kontenerowe

• Klasy zapewniające mechanizmy łatwego przechowywania, udostępniania, zapisywania dużej ilości obiektów (często różnych klas).

Page 59: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Przykłady klas kontenerowych

• Collection – służy do przechowywania pojedynczych elementów

• List – lista obiektów w kolejności

• Set – zbiór obiektów ( bez kolejności)

• ArrayList – bardziej zaawansowana lista

• HashMap – lista asocjacyjna

• Inne…

AC1

Page 60: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Slajd 59

AC1 Dodać częśc o Collection i ArraylistachAndrzej Chybicki; 2006-11-07

Page 61: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Uwagi odnośnie kontenerów (klas kontenerowych)

• Ponieważ do obiektów możemy wkładać obiekty dowolnej klasy w praktyce tracimy informacje o typie obiektów wydobywanych z kontenerów

• Po wydobyciu obiektu trzeba wykonać rzutowanie do odpowiedniego typu

• Programista sam musi pamiętać jakiego typu obiekty są zapisane w środku (chociaż są wyjątki)

Page 62: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Operowanie na kontenerach -iteratory

• Uniknięcie korzystania z pętli for, whilepodczas przeszukiwania kontenerów

• Wykorzystanie wbudowanych mechanizmów przeglądania kontenerów –szybsze, wygodniejsze i łatwiejsze (przeważnie).

• Spójrzmy na przykład:

Page 63: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 64: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Interfejsy (ang. Interfaces)

• Co to jest interfejs i przede wszystkim do czego służy?

• Semantyka i technika używania interfejsów

Page 65: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Co to jest interfejs?

Konstrukcja o postaci

interface nazwa {

/* Deklaracje metod i definicje stałych */

}

jest w języku Javatypem definiowanym przez użytkownika.

Page 66: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• Interfejs nie jest klasą, jest to osobny typ, który definiuje użytkownik (programista)

• Można traktować interfejs jako klasę abstrakcyjną, z sygnaturami metod i ewentualnie pól

• Interfejs tworzy klasę• Interfejs stanowi szablon wszystkich klas, które go

implementują• W interfejsie nie definiujemy metod – jedynie je

deklarujemy.• Definicja (ciało) metody znajduje się w klasie która

implementuje interfejs• Spójrzmy na przykład:

Page 67: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 68: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Omówienie

• W ogólności w definicji interfejsu wszystkie metody są domyślnie public i abstract,

• Stale są domyślnie public, static i final .

• zabrania się używania specyfikatorów private i protected

• Dostęp do zadeklarowanej w interfejsie metody lub stałej uzyskuje się za pomocą operatora kropkowego, Np. Sleeper.ONE_SECOND.

Page 69: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Przykład interfejsu

Page 70: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Definicja w klasie implementującej

Page 71: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

I teraz co z tym możemy zrobić…

• Poprawne będą wówczas deklaracje:Plane biplane = new Plane();

biplane.takeOff();

Boat vessel = new Boat();

vessel.swim();

• a także deklaracje:PlaneLike aircraft = new Plane();

aircraft.takeOff();

BoatLike motorboat = new Boat();

motorboat.swim();

Page 72: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Do czego w praktyce używa sięinterfejsów

• Najczęściej jako listenery (myszki, klawiatury) , używające wbudowanych interfejsów języka Java

• MouseListener, MouseMotionListener, KeyboardListener

• Zdarzenie (np. kliknięcie lub ruch myszki, naciśnięcie przycisku klawiatury) sąprzechwytywane przez klasę implementującąwybrany interfejs i obsługiwane przez nią. Spójrzmy na przykład:

Page 73: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 74: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Inne praktyczne zastosowania

• Komponenty, które wykorzystują listenery

Button, JButton, Label, Panel, TextField i inne

• Przykladowe listenery:KeyListener, MouseListener,

MouseMotionListener, MouseMoveListener i inne…

Page 75: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Inne sposoby użycia interfejsów -wielodziedzicznie

• Załóżmy, iż chcemy mieć obiekt (klasa SeaPlane), który czasami zachowuje się jak samolot a czasami jak łódź.

• Java nie posiada mechanizmu wielodziedziczenia.

• Jak osiągnąć to poprzez mechanizmy Java?Spójrzmy na przykład:

Page 76: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• Chcemy osiągnąć efekt taki jak pokazano na rysunku w części a)

• Uzyskujemy to w sposób jaki pokazano na rys b)

BoatPlane SeaPlane

Vehicle

interfacePlaneLike

interfaceBoatLike

Vehicle

BoatPlane

SeaPlane

a) b)

Page 77: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 78: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Dziedziczenie interfejsów

Interfejs nie może dziedziczyć klas, ale może dziedziczyć dowolnie wiele interfejsów. Np. korzystając z podanych wyżej definicji moglibyśmy utworzyć interfejs

interface SeaPlaneLike extends PlaneLike, BoatLike{public long SPEED_LIMIT = 1000;}

i wykorzystać go w klasie SeaPlane, implementując metody zadeklarowane w interfejsach PlaneLike i BoatLike. Zauważmy przy okazji, że klasy implementujące dany interfejs mogą traktowaćzadeklarowane w nim stałe tak, jak gdyby były one odziedziczone.

Page 79: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

A jak to wygląda w praktyce?

• Używanie interfejsów głównie wbudowanych (listenery, EJB i inne komponenty)

• Wielodziedziczenie – w praktyce zmienia się hierarchiędziedziczenia, raczej nie implementuje się mechanizmu wielodziedziczniea

• Klasy abstrakcyjne – używa się głównie aby program byłprzejrzysty

• Mechnizmy (interfejsy, static, private, protected) – można nie używać – ale dobre wykorzystanie ułatwia czasami programowanie i zmniejsza ilość kodu

Page 80: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Organizacja kodu wJava

Page 81: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Pliki źródłowe i pakiety czyli organizacja kodu wJava

• Większe programy składają się ze zdecydowanie więcej niż jednej klasy (kilkaset, kilka tysięcy klas)

• Jak już powiedzieliśmy każda aplikacja musi miećprzynajmniej jedną klasę z metodą public static void main, musi mieć on tę samą co nazwa pliku (inaczej jest w przypadku appletów i midletów)

• Nie jest to wymagane ale dla przejrzystości zaleca się aby w jednym pliku źródłowym była implementacja jednej klasy.

• Jeśli w pliku znajduje się więcej niż definicją jednej klasy w wyniku kompilacji otrzymamy więcej plików z B-kodem *.class. To samo tyczy się klas zagnieżdżonych.

Page 82: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Pakiety (ang. Packages)

• Wszystkie pliki (moduły źródłowe) są niezależniekompilowalne. (uruchamianie z błędami w kompilacji).

• Moduł źródłowy, w którym definicje klas oraz interfejsów poprzedzono deklaracją pakietu o postaci package nazwa_pakietu;staje siępakietem.

• Deklaracja pakietu rozszerza przestrzeń nazw programu i pozwala na lepsze zarządzanie programem wielomodułowym

Page 83: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Organizacja pakietów

• Pakiety a system plików projektu

• Jak dzielić na pakiety?

• Jakie przydzielać nazwy pakietom?

• Pakiety a klasy i dziedziczenie?

• Pakiety a moduły?

Page 84: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Pakiety i pliki w praktyce

• Spójrzmy na przykład:Pakiety są ściśle powiązane z katalogami, w których

umieszcza się moduły źródłowe i pliki wynikowe. Załóżmy np., że w katalogu C:\javaprog (Win’98 DOS) umieszczono główny plik źródłowy aplikacji Student.java, który importuje z katalogu C:\javaprog\myprog\pakiet1 klasy HiGradeoraz LoGrade, umieszczone w plikach HiGrade.javai LoGrade.java. Deklaracje importu mogąmieć postać:

import myprog.pakiet1.HiGrade;import myprog.pakiet1.LoGrade;

Page 85: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 86: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Omówienie przykładu – istotna uwaga

• Uwaga. Deklaracja importu nie oznacza włączania do pliku Student.javatekstu zawartego w plikach HiGrade.javai LoGrade.java. Natomiast pozwala ona użytkownikowi klasy Student używać skrótowych nazw: np. zamiast pisaćmyprog\pakiet1\HiGrade highgrade= newjavaprog\myprog\pakiet1\HiGrade();mogliśmy napisać krótko: HiGrade highgrade = newHiGrade();.Gdybyśmy chcieli używać również klasy Empty(lub innych klas pakietu pakiet1), to deklaracja importu miałaby postać: import mike.myprog.pakiet1.*. W języku Java ważna jest także kolejność deklaracji: najpierw deklaracja pakietu, po niej deklaracje importu, po czym definicje klas.

Page 87: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Pakiety wbudowane (biblioteki)

• Podstawowe pakiety J2SEjava.applet, java.awt, java.beans, java.io,java.lang, java.math, java.net, java.rmi, java.security, java.sql, java.text, java.util, javax.accessibility, javax.swing, org.omg

Page 88: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Klasy zagnieżdżone

• Począwszy od wersji 1.1 języka Javawprowadzono możliwość definiowania klas wewnętrznych (inner classes) jako elementów składowych innych klas;

• Można je definiować albo lokalnie wewnątrz ciała klasy zewnętrznej, albo (anonimowo) jako wyrażenie w bloku

Page 89: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Cechy klas zagnieżdżonych

• Nazwy klasy wewnętrznej nie można użyć na zewnątrz jej zasięgu. Pomaga to w strukturalizacji klas w obrębie pakietu.

• Kod klasy wewnętrznej może wykorzystywaćproste nazwy z zasięgów otaczających, w tym zarówno nazwy zmiennych składowych klasy, jak i nazwy zmiennych wystąpienia klas otaczających oraz zmienne lokalne otaczających bloków.

Page 90: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Klasy wewnętrzne a pola i metody static

• Czy można definiować pola static w klasie wewnętrznej?• Zwykle klasa wewnętrzna nie może deklarować żadnej ze

swoich składowych ze słowem kluczowym static, ponieważ ciało klasy wewnętrznej jest w zasięgu klasy otaczającej (patrz pierwszy slajd)

• W rezultacie zmienne statyczne dla klasy wewnętrznej muszą być umieszczane w klasie otaczającej

• To samo tyczy się metod • Klasa wewnętrzna ( przeciwieństwie do normalnej) może

być statyczna!! (patrz drugi slajd)

Page 91: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 92: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 93: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Jeszcze parę informacji…

• Jeżeli klasa wewnętrzna posiada nazwę, może byćdeklarowana ze słowami kluczowymi private, protected, final , lub abstract. Natomiast klasy anonimowe sąprywatne w bloku, w którym są zadeklarowane, ponieważnie mogą być wykorzystane na zewnątrz tego bloku.

• Zagnieżdżanie klas w ten właśnie sposób pozwala dowolnej klasie wysokiego poziomu dla logicznie powiązanych klas poziomu niższego uzyskać podobną do pakietu organizację, w której wszystkie klasy mają pełny dostęp do pól prywatnych.

Page 94: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Kompilacja klas zagnieżdżonych

• Jak nie mylić klas zewnętrznych o tej samej nazwie z klasami wewnętrznymi innych klas?

• Nazwy klas wewnętrznych są przekształcane aby uniknąćdwuznaczności

• Nazwy są kodowane przez kompilator, który bierze ich postać źródłową, kwalifikuje je kropkami, po czym zamienia każdą kropkę po nazwie klasy na znak dolara (‘$’).

• Tak więc po kompilacji pliku źródłowego “Outer1.java”otrzymamy dwa pliki z B-kodem: “Outer1.class” oraz “Outer1$Inner.class”. Oczywiście interpretacji poddamy plik “Outer1.class”.

Page 95: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 96: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• Istnienie klas zagnieżdżonych wymaga pewnej zmiany w nazwach kwalifikowanych przy definiowaniu zmiennych typu klasy wewnętrznej oraz hierarchii dziedziczenia. Istotne zmiany to:– Inicjowanie zmiennych odnośnikowych typu klasy

wewnętrznej słowem kluczowym this, odpowiadającym bieżącemu obiektowi klasy zewnętrznej.

– Kwalifikowanie dziedziczenia od klasy wewnętrznej jej nazwą, umieszczaną po nazwie klasy zewnętrznej i kropce.

• Ilustracją tego sposobu kwalifikacji nazw jest podany niżej przykład.

Page 97: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 98: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Omówienie przykladu

• W wyniku kompilacji zostaną utworzonecztery pliki z B-kodem: “Vehicle.class”, “Vehicle$Wheel.class”, “WireRimWheel.class” oraz “Auto.class”.

Page 99: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Mechanizm wyjątków w Javie(ang. Exceptions)

• Programista tworząc aplikację nie zawsze jest w stanie w pełni przewidzieć jej zachowanie, w szczególności gdy ma do czynienia ze zdarzeniami od aplikacji niezależnymi np. użytkownik, sieć, obsługą urządzenia zewnętrznego

• Język Java umożliwia zabezpieczenie się przez nieprzewidzianymi błędami jakie mogą wystąpić podczas działania programu.

• W przypadku wystąpienia błędu sterowanie programu wychodzi z aktualnie wykonywanej metody i przechodzi do specjalnego bloku obsługi wyjątku (try i catch).

• Mechanizm obsługi wyjątków zwiększa niezawodnośćprogramów Java.

Page 100: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wykrywanie błędów w programie

• Oczywiście najlepiej jest wykrywać błędy już w fazie kompilacji, ale nie zawsze programykompilowalne są poprawne.

• Fajnie, jest gdy możemy obsłużyćnieprzewidziany przez nas błąd podczas działania programu a nie podczas kompilacji

• Filozofia Java obsługi błędów polega na wymuszeni na programiście pewnych zachowańzwiększających jakość aplikacji (czyt. programista często jest zmuszany do obsługi błędów przy wywoływaniu niektórych metod).

Page 101: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Filozofia wyjątku

• Wiemy, że w danym momencie może wystąpić wyjątek – i wiemy, że nie wiemy co z nim zrobić…

• Przekażmy więc ten problem do innego bloku programu ( argumentem przekazania jest wyjątek zawierający opis błędu) , który wie co z tym błędem zrobić…

Page 102: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Kiedy obsłużyć wyjątek

• Programista sam może (zaraz o tym powiemy) decydować czy w danym momencie ma być„wyrzucany” wyjątek czy też nie.

• ZASADA:Wyjątek jest wtedy gdy w danym momencie przetwarzania nie mamy wystarczająco informacji aby poradzić sobie z danym problemem.

Page 103: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wyjątki

• W języku Java istnieje bardzo rozbudowana hierarchia (drzewo) predefiniowanych klas wyjątków, których superklasą jest klasa Throwable

• Można definiować sobie własne wyjątki dziedziczące po klasie Throwable

Page 104: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

No a jak to wygląda w praktyce• Dla obsługi wyjątków wprowadzono pięć słów kluczowych: throw ,

throws, try , catch i finally . Słowo kluczowe throw służy do jawnego zgłaszania wyjątków nieweryfikowalnych i występuje w instrukcji throwo składni throw wyrażenie; gdzie wyrażeniemusi oznaczaćzmienną lub wartość typu referencyjnego do klasy Throwablelub jej podklas.

• Zgłoszenie wyjątku w instrukcji throw spowoduje natychmiastowe opuszczenie bloku lub funkcji zawierającego instrukcję throw i wyszukanie instrukcji try, której fraza catchprzechwyci zgłoszony wyjątek. Jeżeli nie ma takiej instrukcji try, zostanie wywołana metoda UncaughtExceptioni wykonanie programu (lub wątku) zostanie zakończone.

• Fraza:throws klasa_wyjątkówmoże wystąpić w nagłówku funkcji (metodzie wystąpienia, konstruktorze, funkcji klasy)

• Blok frazy finally (jeśli występuje) jest wykonywany zawsze gdy kończy się wykonanie instrukcji try i to nawet wtedy, gdy wykonanie try zostaje gwałtownie przerwane.

• Zobaczmy przykład:

Page 105: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 106: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 107: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Współbieżność w języku Java

• „Obiekty zapewniają sposób podziału programu na niezależne części. Często jednak musimy również podzielić program na rozłączne i niezależnie działające podzadania”

• Każde z niezależnych zadań nazywa się wątkiem (ang. Thread)

• Z punktu widzenia programisty każdy wątek działa samodzielnie posiadając dokładnie jeden procesor dla siebie

Page 108: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Proces a wątek

• Proces jest wykonującym się programem z własną przestrzenią adresową (przydzielonąmu pamięcią)

• Wątek jest osobnym, pojedynczym sekwencyjnym przepływem sterowania działającym w ramach jednego procesu

Page 109: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Cechy programowania współbieżnego

1. Wymaga innego sposobu myślenia o programowaniu niż klasyczne programowanie strukturalne czy obiektowe

2. W każdym języku programowania programowanie współbieżne jest podobne i wymaga podobnego sposobu myślenia

Page 110: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wątki w Java

• Na potrzeby wykładu poznamy jedynie podstawową zasadę działania mechanizmu wątków

• Dogłębna analiza wymaga zagłębienia się w filozofię i szczegółowe rozwiązania języka

Page 111: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Po co stosować wątki?

• Interfejsy

• Obsługa urządzeń sieciowych

• Obsługa urządzeń elektronicznych

• Optymalizacja zadań

Page 112: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Jak to się pisze?

• Poniższy przykład ilustruje jak się w Javatworzy wątki

• Klasa java.lang.Thread

• Implementacja interfejsu Runnable

• Metoda run()

• Spójrzmy na przykład:

Page 113: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 114: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wynik działania programuWyjście z programu będzie mieć postać zależną od maszyny (wątki mogą się przeplatać):Name of x: Thread-0Priority of x= 5Name of y: Thread-1Priority of y= 5End of main()Msg 1 from Thread-0Msg 2 from Thread-0Msg 3 from Thread-0Msg 1 from Thread-1Msg 4 from Thread-0Msg 2 from Thread-1Thread-0 DONE!! Msg 3 from Thread-1Msg 4 from Thread-1Thread-1 DONE!!

Uwaga. Nie należy wywoływać jawnie metody run(). Bezpośrednie wywołanie run() spowoduje jej wykonanie w normalny, sekwencyjny sposób

Page 115: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Cechy wątków

• Priorytet wątków (liczby od 1-10) oznacza „ważność” wątków. JVM w zależności od priorytetu wątku przydziela odpowiednio (z określonym prawdopodobieństwem) czas procesora. setPriority(int priority);

• Dwa osobne wątki działają w sumie wolniej niż jeden wątek główny.

Page 116: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Wielowątkowość

• Jeżeli maszyna jest wieloprocesorowa wątki mogąbyć naprawdę wykonywane współbieżnie, w przeciwnym wypadku mamy do czynienia z wielowątkowością wywłaszczeniową.

• Wielowątkowość wywłaszczeniowa polega na rozdzielaniu poszczególnym wątkom kwantów procesora (w zależności od ich priorytetu)

• Wątki nie są „karmione” procesorem „jeden po drugim”, lecz na przemian.

Page 117: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Terminy związane z wielowątkowością

• Terminy związane:– Zagłodzenie wątku

– Łączenie wątków

– Wątki demony

– Uśpienie wątków

Page 118: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Zagłodzenie wątku

• Uwaga. Zagłodzenie może się zdarzyć wtedy, gdy jeden lub więcej wątków w programie jest blokowanych przed dostępem do pewnego zasobu i wskutek tego nie mogą biec dalej. Krańcowąpostacią zagłodzenia jest zakleszczenie lub impas (deadlock). Impas pojawia się wtedy, gdy dwa lub więcej wątków czeka na warunek, który nie może być spełniony; typowym przykładem jest sytuacja, gdy istnieją dwa wątki i każdy z nich czeka na wykonanie czegoś przez partnera

Page 119: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Interfejs Runnable

• Mówili śmy już wcześniej, że wątki można definiować na dwa sposoby – Dziedziczenie po klasie java.lang.Thread– Implementacja interfejsu Runnable

• Właściwie oba te rozwiązania oznaczają to samo, gdyżklasa Thread implementuje interfejs Runnable, a klasa dziedzicząca po niej też go musi definiować.

• Różnice są tylko w sposobie deklarowania wątku, czyli z punktu programisty. Z koncepcyjnego punktu widzenia różnic nie ma.

• Spójrzmy na przykład:

Page 120: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 121: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Współpraca wątków

• Jeden, pojedynczy program można traktować jako samotnika poruszającego siędowolnie po przestrzeni zasobów (pamięci, portów, urządzeń zewnętrznych i innych)

• W takim przypadku nie ma problemów z dostępem do zasobów, które mogą naraz obsługiwać jednego użytkownika (urządzenia sieciowe, pliki i inne)

Page 122: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Istota problemu

• W programie wielowątkowym może sięzdarzyć sytuacja, że dwa wątki naraz chcąkorzystać z tego samego zasobu (plik, baza danych, zasób sieciowy itp).

• Rozwiązanie:

Synchronizacja wątków

Page 123: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Sekcja krytyczna

• Segmenty kodu programu, które żądajądostępu do tego samego obiektu z dwóch oddzielnych, współbieżnych wątków, nazywa się sekcjami krytycznymi. W językuJava sekcją krytycznąmoże być blok lub metoda; identyfikuje się je słowem kluczowym synchronized.

Page 124: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

synchronized

• Instrukcja synchronizedprzejmuje wzajemnie wykluczającą blokadę na rzecz wykonywanego wątku, wykonuje Blok, po czym zwalnia blokadę. Inaczej mówiąc, wykonanie instrukcji synchronizedpowoduje przydzielenie wątkowi podanego Bloku jako sekcji krytycznej, a po wykonaniu go na rzecz obiektu identyfikowanego przez Wyrażenie, zwolnienie sekcji.

• Spójrzmy na prosty przykład:

Page 125: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 126: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Synchronizowanie metod

• Jeżeli różne metody korzystają z tego samego zasobu, to również muszą być synchronizowane.

• Metoda jest synchronizowana jeżeli w jej nagłówku umieszczono słowo kluczowe synchronized.

• Synchronizowana metoda operująca na obiekcie pewnej klasy automatycznie nakłada blokadę na ten obiekt przed wykonaniem jego ciała (funkcji, metod) i automatycznie zwalnia blokadę przy powrocie, podobnie jak instrukcja synchronized.

Page 127: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 128: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 129: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

• Zauważmy, że w klasie Test metoda classBump() jest statyczna (jest metodą klasy). Zatem, mimo iżmetoda ta jest synchronizowana, może byćjednocześnie wywoływana na rzecz wielu obiektów, a więc blokada nie będzie efektywna. Dla uniknięcia możliwości jednoczesnego wykonywania pewnej operacji na tym samym obiekcie (w szczególności zawierającym metody statyczne) przez dwa różne wątki dobrą praktykąjest definiowanie klas tak, aby były przygotowane na użycie współbieżne

Page 130: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.
Page 131: Java – wst p do j ęzykaknot805.eti.pg.gda.pl/po/pdf/Java_intro.pdfAplikacje Java • Warunek uruchomienia: zainstalowanie na komputerze JDK (Java Developement Kit) lub JRE ( ang.

Synchronizacja metodKażde wystąpienie klasy Box ma pewną zawartość

zmiennej wystąpienia, która utrzymuje referencję do dowolnego obiektu. W rezultacie można włożyć obiekt do pudełka (Box) wywołaniem metody put(), która zwróci falsejeżeli pudełko jest już pełne. Podobnie można wyjąć obiekt z pudełka wywołaniem metody get(), która zwróci null jeżeli pudełko jest puste. Gdyby put() i get() nie były synchronizowane i dwa wątki wykonywałyby te metody na tym samym obiekcie klasy Box w tym samym czasie, wtedy wykonanie programu dwuwątkowego mogłoby przebiegać w sposób przez nas nieoczekiwany