J zyk programowania JAVA c 2011-12 Vincent Van GOGH: M»czyzna pij cy li»ank kawy
W tki Proces to wykonuj cy si program wraz z dynamicznie przydzielanymi mu przez system zasobami (np. pami ci operacyjn, zasobami plikowymi). Ka»dy proces ma wªasn przestrze«adresow. W tek to sekwencja dziaªa«, która wykonuje si w kontek±cie danego procesu (programu) Ka»dy proces ma co najmniej jeden wykonuj cy si w tek. W systemach wielow tkowych proces mo»e wykonywa równolegle (teoretycznie) wiele w tków, które wykonuj si w jednej przestrzeni adresowej procesu.
Programowanie wielow tkowe Cech charakterystyczn programowania wielow tkowego jest to,»e tworzone programy dzieli si na wieksz liczb procesów, które mog by wykonywane równocze±nie. Wiele zada«wyst puj cych w interakcyjnych programach jest wykonywanych wspóªbie»nie. Zadania, które mog by wykonywane wspóªbie»nie to np: odczytywanie i zapisywanie plików korzystanie z zasobów sieciowych reagowanie na dane wprowadzane przez u»ytkownika wykonywanie skomplikowanych trwaj cych dªugo oblicze«wy±wietlanie animacji i interfejsów u»ytkonika
Wkorzystanie w tków Reasumuj c, w tki mo»na wykorzysta w wielu sytuacjach: Wszelkie obliczenia, które mog zablokowa interfejs u»ytkownika powinny by wykonywane asynchronicznie Animacje, które powinny by przetwarzane niezale»nie od interfejsu u»ytkownika Pobieranie danych z internetu (zamiast przetwarza strony internetowe jedna po drugiej mo»na poª czy si np. z 10 jednocze±nie) W ogólno±ci wszystkie operacje wej±cia/wyj±cia, zapis i odczyt plików, czy baz danych Zªo»one obliczenia, które mog by podzielone na mniejsze podzadania I wiele innych
Jednow tkowa p tla zdarze«w systemach jednow tkowych stosowane jest rozwi zanie zwane p tl zdarze«z odpytywaniem. W takim modelu istnieje jedna p tla niesko«czona, w której wykonywane s kolejne w tki pobierane z kolejki procesów. Poszczególne w tki wykonywane s przez odpowiadaj ce im procedury obsªugi zdarze«. Do zako«czenia bie» cego w tku, nie mo»e by w systemie podj te»adne inne dziaªanie.
Systemy wielow tkowe Równolegªo± dziaªania w tków osi gana jest przez mechanizm przydzielania czasu procesora poszczególnym wykonuj cym si w tkom. Ka»dy w tek uzyskuje dost p do procesora na kwant czasu, po czym przekazuje procesor innemu w tkowi. Zmiana w tku wykonywanego przez procesor mo»e dokonywa si na zasadzie: wspóªpracy w tek sam decyduje, kiedy odda czas procesora innym w tkom, wywªaszczania o dost pie w tków do procesora decyduje systemowy zarz dca w tków, który przydziela w tkowi kwant czasu procesora, po upªywie którego odsuwa w tek od procesora i przydziela kolejny kwant czasu innemu w tkowi. Java jest j zykiem wieloplatformowym, a ró»ne systemy operacyjne stosuj ró»ne mechanizmy udost pniania w tkom procesora. Programy wielow tkowe powinny by tak pisane, by dziaªaªy zarówno w ±rodowisku wspóªpracy jak i wywªaszczania.
Systemy wielow tkowe W sytemie wielow tkowym wykorzystuje si fakt,»e wi kszo± czasu wykonywania w tku to czas oczekiwania na dost pn ± zasobu. Je»eli wszystkie procesy s niezale»nymi w tkami, a system potra przeªacza si pomi dzy w tkiem oczekuj cym na dany zasób, a w tkiem gotowym do dziaªania, to w tym samym czasie mo»na wykona znacznie wi cej dziaªa«. W Javie nie ma pojedy«czej p tli zdarze«. Je»eli jeden w tek np.: odczytuje dane z sieci czeka na dane wprowadzane przez u»ytkownika albo wy±wietla animacje, nie wykonuj c»adnych innych dziaªa«to pozostaªe w tki mog dziaªa bez jakichkolwiek przerw
Systemy wielow tkowe Bardzo wa»ne jest równie» to,»e je±li uruchomimy jeden po drugim np. 10 w tków, to wcale nie b d one wykonywaªy si sekwencyjnie jeden po drugim, je±li sami o to nie zadbamy. Je±li jakie± zadanie nie zd»y si wykona w czasie, który zostaª dla niego przydzielony, to mo»e ono zosta przerwane na pewien czas.
Tworzenie w tków W tki w Javie mo»na tworzy na kilka sposobów, poprzez: jawne rozszerzenie klasy Thread stworzenie klasy implementuj cej interfejs Runnable, który mo»e by wykonany w osobnym w tku (Thread) stworzenie klasy implementuj cej interfejs Callable, który mo»e by wykonany w osobnym w tku (Thread) Preferowane jest stosowanie rozszerze«interfejsów, poniewa» daj one du»o lepsz elastyczno±, szczególnie je±li dojdziemy do momentu szeregowania w tków, utrzymywania staªej puli w tków wykonuj cych si w tle. Interfejsy Runnable i Callable s do siebie bardzo podobne, jednak najwa»niejsz ró»nic jest to,»e Callable mo»e zwróci w wyniku pewn warto±, natomiast w przypadku Runnable nie ma takiej mo»liwo±ci.
Klasa Thread Podobnie jak wszystkie poj cia Javy, w tki reprezentowane s przez obiekty okre±lonej klasy. W tki reprezentowane s przez obiekty klasy Thread, która zawiera wszystkie metody do zarz dzania w tkami. Klasa Thread jest jedynym elementem Javy pozwalaj cym na zarz dzanie w tkami. Ka»dy w tek w pewnm momencie zaczyna si, wykonuje okre±lon liczb dziaªa«, po czym ko«czy si.
Metody klasy Thread Metody klasy Thread dzielimy na Metody statyczne wywoªuje si je bezpo±rednio z nazw klasy: Thread. c u r r e n t T h r e a d ( ) Metody zwi zane z obiektami nie s metodami statycznymi, mo»na z nich korzysta dopiero po utworzeniu obiektu klasy Thread.
Metody statyczne zestawienie Metoda currentthread() zwraca obiekt klasy Thread reprezentuj cy bie» cy w tek. Metoda yield() poleca systemowi czasu przebiegu Javy przerwanie wykonywania bie»acego w tku i przekazanie procesora nast pnemu oczekuj cemu w tkowi. Jest to jedyny sposób uzyskania pewno±ci,»e w tki o najni»szych priorytetach b d kiedykolwiek wykonane. Metoda sleep(int n) poleca systemowi czasu przebiegu u±pienie bie»acego w tku na n milisekund. Po upªywie tego czasu w tek b dzie gotowy do dziaªania.
Metody zwi zane z obiektami zestawienie Trzy podstawowe metody klasy Thread: Metoda start() poleca utworzenie i uruchomienie nowego w tku. Jego dziaªanie polega na wykonaniu metody run() nale» cej do obiektu wskazanego podczas tworzenia danego w tku. Niedozwolone jest wielokrotne wywoªywanie tej metody dla tego samego w tku. Metoda run() Jest to zasadnicza cze± ka»dego w tku. Nie nale»y ona do klasy Thread, jest to jedyna metoda interfejsu Runnable. Wywoªuje j metoda Metoda start() po poprawnym utworzeniu nowego w tku. Zako«czenie dziaªania metody run() oznacza zatrzymanie zwi zanego z ni w tku. Metoda inerrupt() umo»liwia przerwanie dziaªania w tku.
Inne metody klasy Thread zestawienie Metoda suspend() zawieszenie w tku Metoda resume() wznawienie wykonywania zawieszonego w tku Metoda setpriority(int p) Ustawia priorytet w tku Metoda getpriority() Pobiera i zwraca priorytet w tku Metoda setname(string name) Ustawia nazw w tku Metoda getname() Pobiera i zwraca nazw w tku Metoda stop() powoduje natychmiastowe zatrzymanie w tku. W tek przestaje istnie. i inne: wait(), notify(), notifyall(), isalive(), join()...
Tworzenie w tków Program korzystaj cy z wi cej ni» jednego w tku mo»emy utworzy na dwa sposoby: Bezpo±rednio poprzez dziedziczenie klasy Thread Po±rednio poprzez implementacj interfejsu Runnable.
Dziedziczenie klasy Thread Bezpo±rednie dziedziczenie z klasy Thread 1 c l a s s MyThread extends Thread { 2... 3 p u b l i c void run ( ) { 4... 5 } 6 } Tworzenie obiektu i uruchamianie w tku: 1 MyThread t = new MyThread ( ) ; 2 t. s t a r t ( ) ;
Implementacja Runnable Po±rednie poprzez implementacj interfejsu Runnable. 1 c l a s s MyThreadR implements Runnable { 2... 3 p u b l i c void run ( ) { 4... 5 } 6 } Tworzenie obiektu i uruchamianie w tku: 1 MyThreadR r = new MyThreadR ( ) ; 2 Thread t = new Thread ( r ) ; 3 t. s t a r t ( ) ; Wykorzystanie interfejsu jest szczególnie przydatne, gdy dana klasa (klasa w tku) dziedziczy ju» z innej klasy (w Javie nie mo»na dziedziczy z dwóch ró»nych klas).
Tworzenie i uruchamianie w tków przykªad Przykªadowa implementacja interfejsu Runnable: 1 p u b l i c c l a s s Watek1 i m p l e m e n t s Runnable { 2 p u b l i c v o i d run ( ) { 3 System. out. p r i n t l n ( " to j e s t watek i m p l e m e n t u j a c y i n t e r f e j s Runnable " ) ; 4 } 5 } Rozszerzenie klasy Thread: 1 p u b l i c c l a s s Watek2 e x t e n d s Thread { 2 p u b l i c v o i d run ( ) { 3 System. out. p r i n t l n ( " to j e s t watek r o z s z e r z a j a c y k l a s e Thread " ) ; 4 } 5 } A teraz tworzymy i uruchamiamy nasze w tki: 1 p u b l i c c l a s s Uruchom { 2 3 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 4 Watek1 w1 = new Watek1 ( ) ; 5 Watek2 w2 = new Watek2 ( ) ; 6 7 ( new Thread (w1 ) ). s t a r t ( ) ; 8 w2. s t a r t ( ) ; 9 10 } 11 }
Omówienie przykªadu Tworzymy dwa w tki w1 i w2. Pierwszy z nich to obiekt klasy implementuj cej interfejs Runnable, drugi to obiekt klasy dziedzicz cej z klasy Thread. Tutaj wida podstawow ró»nic pomi dzy obiema metodami tworzenia klas. Zaimplementowanie interfejsu wymusza stworzenie obiektu Thread, któremu jako parametr konstruktora dajemy obiekt implementuj cy Runnable. Dopiero tak utworzony obiekt posiada metod start(), która uruchamia w tek. Drugie podej±cie powoduje i» nie musimy tworzy dodatkowego obiektu. Które podej±cie jest lepsze? Oczywi±cie poprzez implementacj interfejsu Runnable poniewa»: opiera si na interfejsach co jest znacznie bardziej elastyczn metod ni» dziedziczenie. nie zaburza hierarchii klas poprzez dziedziczenie z klasy Thread.
Priorytety w tków Java z ka»dym w tkiem programu kojarzy priorytet, informuj cy o tym jak nale»y traktowa w tek w stosunku do innych w tków programu. Priorytet jest liczb caªkowit z zakresu od MIN_PRIORITY(1) do MAX_PRIORITY (10). Domy±lnym priorytetem jest NORM_PRIORITY (5). Ogólna zasada mówi,»e w tki o wysokich priorytech powinny by wykonywane cz ±ciej ni» w tki o niskich priorytetech. Do ustawiania priorytetu w tku sªu»y metoda: setpriority(int p).
Synchronizacja Tworz c w tki nale»y pami ta,»e wspóªdziel one pomi dzy sob pami i zasoby. Mo»e to prowadzi do kolizji, a te do bª dów. Bª dy spowodowane przez kolizje jest bardzo ci»ko znale¹ i usun. Je»eli dwa albo wi cej w tków ubiega si do wspóªdzielonych zasobów to musimy zapewni im synchronizacj. W Javie realizowana jest ona za pomoc wbudowanych elementów j zykowych, tzw monitorów, czyli obiektu u»ywanego jako blokady, umo»liwiaj cej wzajemne wykluczanie si w tków. W danej chwili tylko jeden w tek mo»e znajdowa si w monitorze pozostaªe s w zawieszeniu, czekaj c na jego zwolnienie.
Przykªad bez synchronizacji 1 p u b l i c c l a s s Uruchom { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 Watek1 w1 = new Watek1 ( ) ; 4 Watek2 w2 = new Watek2 ( ) ; 5 6 ( new Thread (w1 ) ). s t a r t ( ) ; 7 ( new Thread (w2 ) ). s t a r t ( ) ; 8 } 9 p u b l i c c l a s s Watek1 i m p l e m e n t s Runnable { 10 p u b l i c v o i d run ( ) { 11 f o r ( i n t i = 0 ; i <100000; i ++){ 12 System. out. p r i n t l n ( "W tek1" ) ; 13 } 14 } 15 } 16 17 p u b l i c c l a s s Watek2 i m p l e m e n t s Runnable { 18 p u b l i c v o i d run ( ) { 19 f o r ( i n t i = 0 ; i <100000; i ++){ 20 System. out. p r i n t l n ( "W tek2" ) ; 21 } 22 } 23 } 24 } Po uruchomieniu programu oka»e si,»e przez pewien czas wypisywane s naprzemiennie oba napisy. Z tego wnosek,»e w tki wykonywane s naprzemiennie.
Synchronized Je»eli istnieje jedna lub wiecej metod maj cych wpªyw na wewn trzy stan obiektu w ±rodowisku wielow tkowym nale»y zastosowa mechanizm synchronizacji. Poprzez umieszczenie tych metod w blokach synchronizowanych u»ywakj c sªowa kluczowego synchronized. Ogólna posta bloku synchronizownego: 1 s y n c h r o n i z e d ( o b i e k t ) i n s t r u k c j a albo: obiekt to odwoªanie do dowolnego obiektu. instrukcja to najcz sciej instrukcja zªo»ona zawieraj ca wywoªanie jednej z metod obiektu. 1 s y n c h r o n i z e d metoda ( ) { } gdzie metoda jest synchronizowan metod.
Przykªad z synchronizacj 1 p u b l i c c l a s s Uruchom { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 Watek1 w1 = new Watek1 ( ) ; 4 Watek2 w2 = new Watek2 ( ) ; 5 6 ( new Thread (w1 ) ). s t a r t ( ) ; 7 w2. s t a r t ( ) ; 8 } 9 10 p u b l i c s t a t i c s y n c h r o n i z e d v o i d w y p i s z ( S t r i n g t e k s t ){ 11 f o r ( i n t i = 0 ; i <10000; i ++) 12 System. out. p r i n t l n ( i+" : "+t e k s t ) ; 13 } 14 } 15 16 p u b l i c c l a s s Watek1 17 i m p l e m e n t s Runnable { 18 p u b l i c v o i d run ( ) { 19 Uruchom. wypisz ( "Watek1" ) ; 20 } 21 } 22 23 p u b l i c c l a s s Watek2 24 e x t e n d s Thread { 25 p u b l i c v o i d run ( ) { 26 Uruchom. wypisz ( "Watek2" ) ; 27 } 28 } Po uruchomieniu programu nie zaobserwujemy ju» wymieszania si tekstów pochodz cych z ró»nych w tków.
Wyj tki Wyj tek jest to nietypowa sytuacja pojawiaj ca si podczas wykonywania programun np. wyst pienie bª du polegaj cego na próbie otwarcia pliku, który nie istnieje. Java posiada mechanizm obsªugi wyj tków. Mechanizm obsªugi wyj tków w Javie umo»liwia zaprogramowanie "wyj±cia" sytuacji krytycznych, dzi ki czemu program nie zawiesi si po wyst pieniu bª du wykonuj c ci g operacji obsªuguj cych wyj tek. Wyst pienie sytuacji wyj tkowej przerywa "normalny" tok wykonania programu.
Obsªuga wyj tków Czyli: Wyj tek powstaje na skutek jakiego± nieoczekiwanego bª du. Wyj tek jest zgªaszany (lub mówi c inaczej - sygnalizowany). Wyj tek jest (mo»e lub musi by ) obsªugiwany.
Brak jawnej obsªugi wyj tku przykªad Próba dzielenia przez zero: 1 p u b l i c c l a s s NoCatch { 2 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 3 i n t a = 1, b = 0, c = 0 ; 4 c = a/b ; 5 System. out. p r i n t l n ( c ) ; 6 } 7 } powstaªy bª d (wyj tek) spowoduje zako«czenie programu, a JVM wypisze komunikat o jego przyczynie. 1 E x c e p t i o n i n t h r e a d " main " j a v a. l a n g. A r i t h m e t i c E x c e p t i o n : / by z e r o 2 a t NoCatch. main ( NoCatch. j a v a : 6 )
Obsªuga wyj tków W Javie do obsªugi wyj tków sªu»y pi sªów kluczowych: try okre±la sekwencj instrukcji, podczas których mo»e wyst pi bª d. catch przechwytuje wyj tek okre±lonego typu throw sªu»y do generowania wyj tków okre±lonego typu throws okre±la list wszystkich wyj tków generowanych przez dan metod nally blok instrukcji do obsªugi wyj tków wykonywany zawsze, niezale»nie od tego czy dla danego wyj tku istnieje czy nie istnieje blok catch
Blok try... catch Do obsªugi wyj tków sªu»y blok try... catch. 1 t r y { 2 b l o k i n s t r u k c j i mog cy spowodowa w y j t e k 3 } 4 c a t c h ( Typ_Wyjatku_1 identyfikator_ Wyjatku_ 1 ) { 5 i n s t r u k c j a o b s ª u g 1 wyj tku_1 6 } 7 c a t c h ( Typ_Wyjatku_2 identyfikator_ Wyjatku_ 2 ) { 8 i n s t r u k c j a o b s ª u g 1 wyj tku_2 9 } 10 c a t c h ( Typ_Wyjatku_N identyfikator_wyjatku_n ) { 11 i n s t r u k c j a o b s ª u g 1 wyj tku_n 12 } 13 [ f i n a l l y i n s t r u k c j a _ o b s ª u g i w y j t k u ] Po try nast puje blok instrukcji mog cych spowodowa wyj tek. Je»eli podczas ich wykonywania zostanie on wygenerowany, wykonywanie zostanie przerwane, a sterowanie przekazane do bloku catch. Tu sprawdzane jest, czy która± z tych instrukcji odpowiada wygenerowanemu wyj tkowi. Je±li tak, wykonany zostanie kod po niej wyst puj cy, je»eli nie to kod z bloku nally (je»eli taki istnieje). Instrukcje z bloku nally wykonywane s zawsze.
Blok try... catch sekwencja wykonywania bloku try... catch: Wykonywane s kolejne instrukcje bloku try. Je±li przy wykonaniu której± z instrukcji zostanie zgªoszony wyj tek, wykonanie bloku try jest przerywane w miejscu zgªoszenia wyjatku. Sterowanie przekazywane jest do pierwszej w kolejno±ci klauzuli catch, w której podana w nawiasach okr gªych po sªowie catch klasa wyj tku pasuje do typu powstalego wyj tku, czyli klasa wyjatku jest taka sama jak klasa powstaªego wyj tku lub jest jej dowoln nadklas. Nale»y najpierw zapisywa kluazulecatch z bardziej szczegóªowymi klasami wyj tków: np. najpierw FileNotFoundException, a pó¹niej IOException, bo klasa FileNotFoundException jest pochodna od IOException.
Blok try... catch Inne klauzule catch nie s ju» wykonywane. Obsªuguj ca wyj tek klauzula catch mo»e zrobi wiele rzeczy: m.in. zmieni sekwencj sterowania (np. poprzez return). Je±li nie zmienia sekwencji sterowania to wykonanie programu b dzie kontynuowane od nast pnej instrukcji po bloku try. Ale niezaleznie od tego czy wyj tek powstaª czy nie i niezale»nie od tego czy ew. obsªuguj ca go klauzula catch zwraca sterowanie czy nie zawsze zaraz po zako«czeniem dziaªania bloku try wykonana zostanie klauzula nally (o ile jest).
Przykªad dzielenie przez zero 1 c l a s s d z i e l e n i e _ p r z e z _ z e r o 2 { 3 p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) 4 { 5 i n t b = 0 ; 6 i n t a = 1 0 0 ; 7 i n t c ; 8 S t r i n g wynik ; 9 t r y 10 { 11 c = a / b ; 12 wynik = "" + c ; 13 } 14 c a t c h 15 { 16 ( A r i t h m e t i c E x c e p t i o n e ) 17 System. out. p r i n t l n ( " Niedozwolone d z i e l e n i e p r z e z z e r o " ) ; 18 wynik = " " ; 19 } 20 System. out. p r i n t l n ( wynik ) 21 } 22 }
Przykªad dzielenie przez zero W tym przypadku, wykonanie instrukcji c = a/b spowoduje powstanie wyj tku (dzielenie przez zero), a poniewa» instrukcja ta znajduje si w bloku try, w którym znajduje si blok catch z odpowiednim typem wyj tku, to je»eli b = 0 sterowanie zostanie przekazane do kodu w catch wyprowadzony zostanie napis "Niedozwolone dzielenie przez zero" pod zmienn wynik podstawione zostanie "***" zostanie wypisana zmienna wynik czyli "***" Gdyby zmienna b nie miaªa warto±ci zero, wyj tek by nie powstaª, kod z bloku catch nie zostaª by wykonany i wy±wietlony by zostaª wynik dzielenia a/b.
wyj tki - werykacja danych Mechanizm obsªugi wyj tków mo»e by wykorzystywany w bardzo ró»ny sposób. Typowym przykªadem jest werykacja wprowadzanych danych. I tak od u»ytkownika» damy wprowadzania liczb caªkowitych, a nast pnie za pomoc metody parseint przeksztaªcamy ich znakow reprezentacj na binarn. Je»eli wprowadzony napis nie reprezentuje liczby caªkowitej, to powstaje wyj tek NumberFormatException. Powinnien by on zawsze obsªugiwany. Pokazuje to nast puj cy program.
wyj tki - werykacja danych 1 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 2 3 S t r i n g s1 = JOptionPane. s h o w I n p u t D i a l o g ( " Podaj p i e r w s z l i c z b " ) ; 4 i f ( s1!= n u l l ) { 5 S t r i n g s2 = JOptionPane. s h o w I n p u t D i a l o g ( " Podaj drug l i c z b " ) ; 6 i f ( s2!= n u l l ) { 7 i n t n1 ; 8 i n t n2 ; 9 t r y { 10 n1 = I n t e g e r. p a r s e I n t ( s1 ) ; 11 n2 = I n t e g e r. p a r s e I n t ( s2 ) ; 12 } c a t c h ( NumberFormatException exc ) { 13 System. out. p r i n t l n ( " Bª dne dane " ) ; 14 r e t u r n ; 15 } 16 JOptionPane. showmessagedialog ( n u l l, "Suma : " + ( n1 + n2 ) ) ; 17 } 18 } 19 }
Klasa wyj tków Wyj tki s obiektami klas wyj tków. Nazwy NumberFormatException, ArithmeticException itd. s nazwami klas. Zmienna exc w bloku catch - zawiera referencj do obiektu odpowiedniej klasy wyj tku.
Klasa Throwable Klasy wyj tków tworz do± rozbudowan hierarchi dziedzczenia Nadrz dn klas reprezentuj c wyj tki jest klasa Throwable. Ka»da klasa wyst puj ca w bloku try... catch jest jedn z podklas klasy Throwable. Ma ona dwie bezpo±rednie podklasy: Exception u»ywa si jej z wyj tkami generowanymi i przechwytywanymi przez system. Error okre±la wyj tki, które w normalnej sytuacji nie powinny by przechwytywane (s to bardzo powa»ne bª dy).
Klasa RunTimeException Szczególn podklas klasy Exception jest klasa RunTimeException dla wyj tków spowodowanych przez system czasu przebiegu Javy, s one generowane automatycznie. Podstawowa ró»nica pomi dzy tymi klasami polega na tym,»e wyj tki klas pochodnych od Exception. ale nie RuntimeException s tzw. wyj tkami kontrolowanymi, co oznacza,»e musimy zapewni ich obsªug (kompilator zgªosi bª d, je±li tego nie zrobimy). Pozostaªych wyj tków obsªugiwa nie musimy (ale mo»emy)
Zgªaszanie wyj tków instrukcja Throw Oprócz bloku try...catch Java dostarcza jescze inny sposóbe zgªaszania wyj tków. Jest to instrukcja throw. Jest szczególnie przydatna w przypadku wyj tków, których nie da si obsªu»y, ich obsªuga nie ma sensu, lub po prostu ich wyst pienie mo»e spowodowa nieprawidªow prac w dalszych etapach programu. Jej skªadnia : 1 typ nazwa_metody ( ) t h r o w s typ_wyj tku1, typ_wyj tku2,... 2 { 3 kod... 4 t h r o w new typ_wyjatku_1 ( ) ; 5 t h r o w new typ_wyjatku_2 ( ) ; 6 kod 7 }
Throws W nagªówku metody musimy zadeklarowa, korzystaj c z instrukcji throws, list wyj tków jakie dana metoda mo»e wygenerowa. Pó¹niej w kodzie danej metody mo»na je zgªosi (zazwyczaj np w instrukcji if) korzystaj c z instrukcji throw. Zgªasza w ten sposób mo»na wszystkie rodzaje wyj tków, czyli obiekty klas, które po±rednio, lub bezpo±rednio dziedzicz z klasy Throwable. Kompilator wymaga deklarowania wyj tków reprezentowanych przez klas Exception oraz wi kszo± jej podklas. wyj tki klasy Error i RunTimeException oraz wszystkie jej podklasy nie wymagaj deklarowania.
Throw przyklad Program dziel cy liczb 1000 przez liczb podan przez u»ytkownika. 1 i m p o r t j a v a. u t i l. Scanner ; 2 3 p u b l i c c l a s s Main { 4 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a g r s ) t h r o w s A r i t h m e t i c E x c e p t i o n 5 { 6 d o u b l e l i c z b a _ 1 = 1 0 0 0 ; 7 d o u b l e liczba_ 2 ; 8 d o u b l e i l o r a z ; 9 Scanner d z i e l n i k = new Scanner ( System. i n ) ; 10 System. out. p r i n t ( " Podaj d z i e l n i k : " ) ; 11 l i c z b a _ 2 = d z i e l n i k. nextdouble ( ) ; 12 i f ( l i c z b a _ 2 == 0) 13 t h r o w new A r i t h m e t i c E x c e p t i o n ( " Nie mozna d z i e l i p r z e z 0" ) ; 14 e l s e 15 { 16 i l o r a z = l i c z b a _ 1 / l i c z b a _ 2 ; 17 System. out. p r i n t l n ( " wynik d z i e l e n i a : "+ i l o r a z ) ; 18 } 19 } 20 }