c Radosªaw Klimek Vincent Van GOGH: M»czyzna pij cy li»ank kawy J zyk programowania Java

Podobne dokumenty
Współbieżność w środowisku Java

Równolegªo± w Javie w tki.

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

Kurs programowania. Wykład 8. Wojciech Macyna

Programowanie wspóªbie»ne

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Język Java wątki (streszczenie)

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Wzorce projektowe strukturalne cz. 1

Rzut oka na zagadnienia zwi zane z projektowaniem list rozkazów

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Lab. 02: Algorytm Schrage

Programowanie wspóªbie»ne

Model obiektu w JavaScript

1. Wprowadzenie do C/C++

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Wzorce projektowe kreacyjne

1. Wprowadzenie do C/C++

Wykład 8: Obsługa Wyjątków

Programowanie współbieżne i rozproszone

Podstawy modelowania w j zyku UML

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Filozoa Clojure. Mateusz Dereniowski. 15 lipca Instytut Informatyki Uniwersytetu Wrocªawskiego

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Język Java wątki (streszczenie)

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Programowanie wielowątkowe. Tomasz Borzyszkowski

Podstawy modelowania w j zyku UML

Lekcja 12 - POMOCNICY

Listy i operacje pytania

Wątki w Javie. Piotr Tokarski

Lekcja 6 Programowanie - Zaawansowane

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

Kolekcje obiektów. Wyj tki.

Aplikacje w Javie- wykład 11 Wątki-podstawy

Lekcja 5 Programowanie - Nowicjusz

Programowanie i struktury danych

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Rozwi zania klasycznych problemów w Rendezvous

Współbieżność w Javie

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Współbieżność w Javie

Programowanie i struktury danych 1 / 44

Rozwi zywanie Ukªadów Równa«Liniowych Ax=B metod dekompozycji LU, za pomoc JAVA RMI

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

Podstawy Informatyki i Technologii Informacyjnej

Wska¹niki, tablice dynamiczne wielowymiarowe

Lekcja 3 Banki i nowe przedmioty

Szeregowanie zada« Przedmiot fakultatywny 15h wykªadu + 15h wicze« dr Hanna Furma«czyk. 7 pa¹dziernika 2013

Ukªady równa«liniowych

2 Skªadnia polece«w pliku

2 Liczby rzeczywiste - cz. 2

Bazy danych, 4. wiczenia

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

1 Metody iteracyjne rozwi zywania równania f(x)=0

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Lekcja 9 Liczby losowe, zmienne, staªe

Baza danych - Access. 2 Budowa bazy danych

Aplikacja wielow tkowa prosty komunikator

Sposoby przekazywania parametrów w metodach.

x y x y x y x + y x y

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

Podstawy modelowania w j zyku UML

Podstawy JavaScript. Dawid Poªap. Dawid Poªap Technologia informacyjna Grudzie«, / 13

Metody numeryczne. Wst p do metod numerycznych. Dawid Rasaªa. January 9, Dawid Rasaªa Metody numeryczne 1 / 9

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Subversion - jak dziaªa

Ekonometria. wiczenia 1 Regresja liniowa i MNK. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

1 Bª dy i arytmetyka zmiennopozycyjna

O pewnym zadaniu olimpijskim

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Bazy danych. Andrzej Łachwa, UJ, /15

Tworzenie aplikacji webowych w oparciu o framework ObjectLedge

Opis matematyczny ukªadów liniowych

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

Projekt systemy operacyjne 2 - Systemowe mechanizmy synchr

Transkrypt:

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 }