Język JAVA ‐ podstawy Politechnika Gdańska, Gdańska Inżynieria Biomedyczna wykład 2, część 3 Jacek Rumiński 1 Język JAVA ‐ podstawy Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5 Wyjątki 5. 6. Klasa w klasie ! Jacek Rumiński 2 Język JAVA – archiwa Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Co to jest archiwum Javy (JAR – Java ARchive)? Odpowiedź właściwie jest prosta: spakowane metodą ZIP pliki, pliki wchodzące w skład biblioteki, aplikacji, apletu, ... W JDK dostępne ęp jjest specjalne p j narzędzie ę jjar.exe. W celu stworzenia archiwum z wszystkich klas zawartych w bieżącym k l katalogu i nadać d ć mu nazwę JediArchiwum J diA hi można ż wywołać ł ć polecenie: l i jar ‐cf JediArchiwum JediArchiwum.jar .jar jar *.class class ‐c ‐t ‐x ‐u ‐f Jacek Rumiński stwórz nowe archiwum pokaż zawartość archiwum pobierz podane pliki z archiwum aktualizuj archiwum określenie nazwy archiwum 3 Język JAVA – archiwa Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Archiwum – demonstracja. Stwórzmy archiwum złożone z kilku plików *.class dla przykładowego apletu. Pliki źródłowe: R RycerzJedi.java J di j Sith.java Rywalizacja.java (aplet) Wszystkie przykładowe pliki programów załączono na stronie kursu (SZKOLENIA/JAVA) http://uno.biomed.gda.pl Jacek Rumiński 4 Język JAVA – archiwa Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Archiwa Javy Warto zauważyć, że wszystkie dystrybuowane biblioteki Javy (zarówno w JDK jak i inne) dostarczane są najczęściej w formie plików JAR. Jeśli chcesz zobaczyć co jest zawartością pliku archiwum można tymczasowo zmienić jego rozszerzenie na „.zip” „.zip i rozpakować (podgląd). Wówczas zobaczymy strukturę pakietów (czyli katalogów) oraz zawarte pliki klas (.class) i ewentualnie inne pliki (zasoby). Jacek Rumiński 5 Język JAVA – archiwa Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Archiwa Javy Archiwa mają również ciekawe zastosowania dla potrzeb apletów. Otóż jeśli aplet składa się z wielu plików to lepiej utworzyć archiwum (któ b (które będzie d i przesłane ł jjako k jeden, j d skompresowany k plik) lik) i wywoływać ł ć główną klasę apletu względem archiwum. <applet code="Rywalizacja.class" archive="JediArchiwum.jar" width="400" height="300"></applet> Ponadto archiwum można podpisać cyfrowo i po weryfikacji nadać większe uprawnienia podpisanemu kodowi apletu. Jacek Rumiński 6 Język JAVA ‐ podstawy Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5 Wyjątki 5. 6. Klasa w klasie ! Jacek Rumiński 7 Język JAVA – wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Wyjątki. Wyobraźmy y y sobie następujące ęp ją sytuacje: y j ¾chcemy czytać z pliku o podanej nazwie, ale plik nie istnieje, ¾wywołujemy połączenie z komputerem, ale adres jest nieprawidłowy, ¾przesyłamy dane, dane ale zerwane zostało połączenie ¾itp. Sytuacje y j takie nie sąą prawidłowe p czyy pożądane. p ą Jeśli możemyy przewidzieć ich potencjalne wystąpienie to lepiej zabezpieczyć kod źródłowy (zamiast otrzymać w czasie wykonywania programu coś typu General Protection Fault). Tym zabezpieczeniem jest oznaczenie określonych metod metod, że mogą potencjalnie być źródłem wyjątku. Jacek Rumiński 8 Język JAVA –wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Co to jest wyjątek? Wyjątek yją to instancja j uniwersalnego g typu yp danych, y , któryy ma wartości i funkcje ‐ czyli Æ wyjątek to obiekt, typ wyjątku to klasa! Każdy wyjątek ma swoją nazwę (nazwę klasy), która zwykle sugeruje jakiego rodzaju jest to wyjątek, np.: w pakiecie java.io.*: java io *: FileNotFoundException ‐ brak pliku InterruptedIOException p p ‐p przerwanie operacji p j we/wy / y IOException ‐ klasa nadrzędna wyjątków we/wy w pakiecie java.lang.*: ArrayIndexOutOfBoundsException ‐ przekroczenie zakresu tablicy, ClassNotFoundException ‐ brak klasy, klasy Exception ‐ klasa nadrzędna wyjątków. Jacek Rumiński 9 Język JAVA –wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Skąd mam wiedzieć kiedy i jak obsługiwać wyjątki? Jeśli używasz y jakiejś j j metody, y, która może zwrócić wyjątek yją wówczas musisz obsłużyć wyjątek lub odpowiednio wprowadzić właściwą deklarację. Jeśli tego nie zrobisz (a wyjątek jest innego rodzaju niż RuntimeException czy Error) wówczas kompilator poinformuje Cię Cię, że kompilacja się nie udała, bo brak wymaganej obsługi (deklaracji) wyjątku. yją Ponadto p poda informacje j o jjaki wyjątek yją ((nazwa klasy) y) chodzi i dla jakiej metody powinna być napisana obsługa wyjątku. Zawsze możemy sprawdzić w dokumentacji klas, czy dana metoda zwraca wyjątek. Możemy tworzyć również własne typy wyjątków (czyli klasy) i generować je (stwarzać i przesyłać obiekty). Jacek Rumiński 10 Język JAVA –wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Skąd mam wiedzieć kiedy i jak obsługiwać wyjątki? Obsługa wyjątku: try{ //1.tu wywołanie metody, która może wywołać wyjątek klasy Exception //2 jeśli dojdziemy do drugiej linii kodu po 1 //2. 1. – wyjątek nie pojawił się } catch (Exception e) { //tu instrukcje związane z obsługą sytuacji wyjątkowej (np. komunikat) } Deklaracja (określanie) wyjątku: public void mojaMetoda() throws Exception{ //(...) //1.tu wywołanie metody, która może wywołać wyjątek klasy Exception //(...) } Jacek Rumiński 11 Język JAVA –wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Jak obsługiwać wyjątki? Jedna metoda zwraca więcej niż jeden wyjątek? try{ //1.tu wywołanie metody, która może wywołać wyjątki klas: // Exception1 i Exception2 //2. jeśli dojdziemy do drugiej linii kodu po 1. – wyjątek nie pojawił się } catch (Exception1 e1) { //tu instrukcje związane z obsługą wyjątku Exception1 }catch (Exception2 e2){ //tu instrukcje związane z obsługą wyjątku Exception2 } finally{ //opcjonalne //tu instrukcje, których wykonanie jest gwarantowane , np. zamknięcie // ł //połączenia i sieciowego i i } Jacek Rumiński 12 Język JAVA –wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Kiedy nie chcemy obsługiwać wyjątku ‐ ponieważ ma być obsługiwany przez metody, korzystające z danej metody d zwracającej j j wyjątek j k ‐ wówczas ó d deklarujemy kl j możliwość żli ść pojawienia się wyjątku poprzez użycie słowa kluczowego „throws” i wyliczenie (po przecinkach) klas wyjątków: wyjątków: public void mojaMetoda() throws Exception{ //( ) //(...) //1.tu wywołanie metody, która może wywołać wyjątek klasy Exception //(...) } Jeśli ktoś będzie chciał użyć metody mojaMetoda() wówczas musi albo obsłużyć wyjątek albo zadeklarować throws ...itd. Jacek Rumiński 13 Język JAVA –aplety Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Jak samemu generować wyjątki ? Do tego służy specjalne słowo kluczowe (instrukcja) „throw”. //(...) if (liczbaOdebranychPakietow < 10) //jeżeli nie spełniony jest warunek throw h new Exception("Za (" malo l odebranych d b h pakietow!!!"); k ") //(...) Klasa Exception to jedna ze standardowych klas wyjątków (jedna z najbardziej ogólnych, po której większość dziedziczy). wyjątku np. np MyException wówczas Jeśli chcemy mieć własny typ wyjątku, należy stworzyć nową klasę dziedzicząc po klasie np. Exception: public class MyException extends Exception{ //tu treść – jak dla każdej klasy – o czym dalej } //koniec class MyException Jacek Rumiński 14 Język JAVA – wyjątki Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Wyjątki – demonstracja. WyjatkowyJedi.java MyException.java Wszystkie przykładowe pliki programów załączono na stronie kursu (SZKOLENIA/JAVA) http://uno.biomed.gda.pl Jacek Rumiński 15 Język JAVA ‐ podstawy Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5 Wyjątki 5. 6. Klasa w klasie ! Jacek Rumiński 16 Język JAVA –klasy wewnętrzne Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Co jeszcze może zawierać klasa? Oprócz O ó cech h ((pól), ól) kkonstruktora k oraz metod d kl klasa może ż zawierać i ć jeszcze klasy wewnętrzne. Klasę wewnętrzną definiujemy w obrębie nawiasów klamrowych klasy zewnętrznej. public class MasterJedi{ //pola i funkcje klasy MasterJedi class StudentJedi { //pola i funkcje klasy StudentJedi }//koniec class StudentJedi }//koniec class MasterJedi Klasa wewnętrzna staje się częścią klasy zewnętrznej i dostęp do niej jest poprzez podanie klasy zewnętrznejj llub do wywołania) d i nazwy kl b ((stosowanie i d ł i ) obiektu klasy zewnętrznej. Jacek Rumiński 17 Język JAVA –klasy wewnętrzne Politechnika Gdańska Gdańska, Inżynieria Biomedyczna public class MasterJedi { public long mPesel; public MasterJedi(long pes) { mPesel = pes; } class l St d tJ di { StudentJedi public long sPesel; public StudentJedi(long pes) { sPesel=pes; System.out.println("PESEL mistrza to: " +mPesel); System.out.println("PESEL ucznia to: " +sPesel); }; }//koniec class StudentJedi public static void main(String args[]) { MasterJedi mj = new MasterJedi(90100903890L); MasterJedi.StudentJedi sj= mj.new StudentJedi(80081204591L); }//koniec main() }//koniec public class MasterJedi Jacek Rumiński 18 Język JAVA –klasy wewnętrzne Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Klasy wewnętrzne Klas wewnętrznych używamy – rzadko – najczęściej wtedy, gdy chcemy h zgrupowaćć klasy, kl kktóre ó są stosowane tylko lk w jjednym, d d danym miejscu. Klasy wewnętrzne mogą być dynamiczne (jak w poprzednim przykładzie) lub statyczne (czyli należą do klasy) oznaczone specyfikatorem static . Klasy wewnętrzne dynamiczne mogą bezpośrednio odwoływać się do wszystkich pól i metod klasy zewnętrznej! Klasy wewnętrzne statyczne mogą to zrobić wyłącznie przez d ł i do d obiektu bi kt klasy kl t j odwołanie zewnętrznej. //w przykładzie MasterJedi.java: public bli StudentJedi(long St d tJ di(l pes)) { sPesel=pes; System.out.println("PESEL mistrza to: " +mPesel); //odwołanie do pola klasy zew. System.out.println("PESEL ucznia to: " +sPesel); }; Jacek Rumiński 19 Język JAVA –klasy wewnętrzne Politechnika Gdańska, Gdańska Inżynieria Biomedyczna Klasy wewnętrzne Do kl D klas wewnętrznych h powrócimy ó i omawiając i j obsługę bł zdarzeń d ń związanych z graficznym interfejsem użytkownika (czyli np. obsługę wciśnięcia przycisku) przycisku). A teraz – zapraszam na kolejny wykład nr 3, w którym zapoznamy się z zasadami d ib budowy d zmiennych, i h poznamy ttypy d danych h oraz podstawowe dt instrukcje sterowania programem jak pętle, instrukcje warunkowe, itp. itp Jacek Rumiński 20