Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jerzy proficz -_programowanie_w_java

580 views

Published on

Java

Published in: Software
  • Be the first to comment

Jerzy proficz -_programowanie_w_java

  1. 1. Programowanie w Języku Java Jerzy Proñcz Programowanie w Języku JAVA Literatura o JDK 1.2 Documentation o Mary Campione, Kathy Walrath, "The Java Tutorial” o James Gosling, Bill Joy, Guy Steele, "The Java Language Specification” Dokumetacja jest dostępna poprzez WWW, pod adresem: http: //www. javasoft. com/ docs/ © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl
  2. 2. Programowanie w Języka JAVA Programowanie w Języku JAVA Właściwości środowiska Java Architektura uniwersalny język obiektowy przenośność na poziome kodu wynikowego (ang. write-once, run everywhere) me chan iz my z achowania bez piecz ens twa (ang. security) Iuunuuuounucu łatwe zarządzanie pamięcią (ang. garbage collector) mechanizmy przetwarzania równoległego podobieństwo do języków C i C++ duża biblioteka klas standardowych stosunkowo wolne implementacje interpretera © 1008-2000 Jerzy Proñcz, _jerpéüprlgdwpl 3 © 1008-2000 Jerzy Proficz, _jerpéiprzgdmpl 4
  3. 3. Programowanie w Języku JAVA Typy proste › typy, których nie trzeba rzutować te (Sb) art (16b) j byte t (32b) byte, short, char ng (64b) byte, short, char, int Jat (32b) byte, short, char, int, long ible (64b) byte, short, char, int, long, float ar (16b) alean © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 5 Programowanie w Języku JAVA Java a C++ (1) Z języka Java zostały usunięte: o preprocesor (w tym pliki nagłówkowe) zmienne i funkcje globalne wskaźniki szablony przeciążenie operatorów dziedziczenie po kilku przodkach równocześnie W języku Java wprowadzono: o dużą bibliotekę klas o odśmiecanie (ang. garbage collector) o interface'y o wie lowątkowość © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl
  4. 4. Programowanie w Języku JAVA Programowanie w Języku JAVA Java a C++ (2) Komentarze i javadoc Rozszerzenie instrukcji m i continue poprzez dodanie parametru (etykiety) określającego miejsce, w którym dana pętla ma być kontynuowana lub zakończona: Dwa rodzaje komentarzy: / / komentarz / * komentarz */ newrow: ETIN@ i = 0; i<100; i++){ flüi J= °š . i<100; J++){ gnam] [j]= =ENDRDw) continue neuron; uœabü] [j]= =END) i loopend; // łi( newrow; Komentarze specjalne, przykład: / ** * A Class representing. .. ›r @author Jerzy Proficz ›r @see java. net. U'RL */ Komentarze specjalne są używane do tworzenia } dokumentacji, za pomocą programu javadoc, loopend; ktory wykorzystuje dyrektywy w mch zawarte do formatowania dokumentu w języku HTML. Nowy operator »> umożliwiający przesunięcie w prawo bez uwzględnienia znaku liczby. © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 7 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl
  5. 5. Programowanie w Języku JAVA Programowanie w Języku JAVA Tworzenie i dziedziczenie klas Słowa kluczowe super i this Przykład: public class SomeClass extends Przykład: public class AClass{ iLt a, b=10; SomeSuperClassiĆ iit max = 100; Public int getMaxO{ public void seti-Hig a){ this. a = a; return max; T } public doSthAndSth O 'Ĺ super. doSthAndSthO ; / / i coś jeszcze Modyfikatory klas: public klasa dostępna dla wszystkich innych k135 (normalnie dostępna Wiko W Swoim o słowo kluczowe super uzywane jest przy Pakiecie) odwołaniach do metod, konstruktorów i pól Final klasa „finalna”, nie można po niej klasy przodka dziedzic/ ZYĆ o słowo kluczowe this oznacza obecny obiekt abstract klasa abstrakcyjna z „pustymi” klasy meto dami © 1008-2000 Jerzy Proñcz, _jerpéüpggdziqrl 0 © 1008-2000 Jerzy Proficz, _1e: rp<ši']1g. gd1L. pl 10
  6. 6. Programowanie w Języku JAVA Konstruktor Przykład: public class AClass extends SupClass{ public AClassüi par){ o konstruktor ma tą samą nazwę co klasa o konstruktory nie są dziedziczone o w przypadku braku definicji konstruktora, dostarczany jest konstruktor domyślny: class AClassf public AClass Of Supero; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Destruktor i odśmiecanie o destruktor jest metodą o nazwie finalize: protected i ñnalize0 i Throwable( / / sprzątanie po sobie }; zakończenie życia niepotrzebnych obiektów (ang. Finalizing Objects), czyli wykonanie ich metod finalize, oraz odzyskanie pamięci czyli odśmiecanie (ang. Garbage Collecting), następuje asynchroniczne ijest wykonywane przez specj alny wątek o niskim priorytecie zakończenie życia niepotrzebnych obiektów można wymusić Wywołując metodę: System. runFinalization () odśmiecanie można wymusić wywołuj ąc metodę: System. gc() © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 12
  7. 7. Programowanie w Języku JAVA Metody i pola klas (1) pola i metody są zawsze definiowane w ciele klasy metody abstrakcyjne (modyfikator abstract) muszą znajdować się w klasie abstrakcyjnej metody zewnętrzne (funkcje z bibliotek związanych z danym systemem) oznaczone są modyfikatorem nat ive cztery rodzaje dostępu do metod i pól: modyfikator dostęp pub lic niekontrolowany protected rodzimy pakiet i klasy dzie- dziczące - rodzimy pakiet private tylko metody klasy © 1998-2000 Jerzy Proficz, _jarr/ @pggtlzrpl Programowanie w Języku JAVA Metody i pola klas (2) metody „finalne” (modyfikator final) nie mogą być nadpisane w klasie dziedziczącej pola z modyfikatorem final nie mogą być zmieniane po zainicjowaniu pola z modyfikator transient są polami nie mającymi znaczenia dla stanu obiektu pola z modyfikatorem volatile są specj ahiie traktowane przez wątki, podczas zmiany ich wartości lub ich odczytywania do pól i metod statycznych (modyfikator static) klasy można się odwoływać bez konieczności posiadania referencji obiektu danej klasy © 1998-2000 Jerzy Proficz, _ierr/ @pggdaq/ l 14
  8. 8. Programowanie w Języku JAVA Programowanie w Języku JAVA Tworzenie obiektów Interface°y Przykład definicji: public intierfaœ Mylnterzfacef . „ _ ' BLUE=1; Deklaracje referencji do obiektu klasy Integer: Ę Integer i; int getColoroš Stworzenie obiektu klasy Integer i przypisanie refererleii? interface może być publiczny (modyfikator i = new Integerüoo); public) lub być dostępny dla rodzimego pakietu Deklaracja referencji do obiektu klasy Vecto r, Wszystkie metody interfacem są stworzenie obiektu tej klasy i przypisanie abstrakcyjne i nie mogą być Zdefiniowane referencji: _ _ wszystkie pola są automatycznie: Vector v - new VectorO; _ _ pubhczne, statyczne i „finalne” Zweinienie referencji; deklaracja interface”u lub metody nie może i = null; mieć innych modyfikatorów niż: public lub abstract (przy czym ten drugi jest domyślny i niezalecany) © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 15 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 16
  9. 9. Programowanie w Języka JAVA Polimorfizm w języku Java (1) polimorfizm W języku Java realizowany jest poprzez interface”y wszystkie nieprywatne i niestatyczne meto dy są wirtualne metody prywatne i konstruktory nie są dziedziczone za pomoca referencji do interfacem można odwoływać się do wszystkich obiektów klas implementuj acych ten interface metoda nadpisana musi zwracać wynik tego samego typu co jej przodek metoda Iiadpisana nie może wysylać innych wyjątków niż jej przodek dwie dowolne metody przeciążone mogą zwracać rezultaty różnych typów © 1008-2000 Jerzy Proficz, _jarr/ (šüpggdzijil Programowanie w Języku JAVA Polimorfizm w języku Java (2) Dziedziczenie klas: class SomeClass extends SomeSuperClass{ Dziedziczenie interface”ów: int erf ace Some Interface extends FirstInterface , Seclnterfaoe( Implementacja interface”ów: class SomeC1ass extends SomeSuperC1ass implements FirstInterface, SecInterface{ . . . } Klasa nieabstrakcyjna musi mieć nadpisane wszystkie metody implementowanych przez nią interfacdów. © 1008-2000 Jerzy Proficz, _ierp<ši*pg. gdzi„pl 18
  10. 10. Programowanie w Języku JAVA Klasy wewnętrzne Klasy wewnętrzne: klasy których definicja znajduje się w ciele innej klasy lub metody. class Outer *f public class Innerf Obiekty klas wewnętrznych mogą korzystać z metod, pól i zmiennych odpowiednich klas obiektów zewnętrznych. Tworzenie obiektów: Outer out = new Outer(. . . ); Outer. Inner in = out. new Inner(. ..); © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Klasy anonimowe Klasy anonimowe: klasy wewnętrzne, które nie mają nazwy, definiowane przy tworzeniu odpowiadających im obiektów. Object someMethodO-f ret-m Ę Dbject(){ public String tostring0i return "Anonymous C1ass"; Klasy anonimowe mogą dziedziczyć po innej klasie (np. Object jak W przykładzie powyżej), lub implementować interface. Konstruktor klasy przodka jest wywołany po jego deklaracji (za słowem kluczowym g). © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 20
  11. 11. Programowanie w Języka JAVA Programowanie w Języku JAVA Klasa Obj ect Klasa Class Klasa Object jest przodkiem wszystkich innych Obiekty tej klasy służą do opisu innych klas. klas. Metody: Są one zwracane przez metodę getClass0 ° C1039 O - tworzy bliźnie@ Obiekt odpowiedniego obiektu i mnożliwia ją equalsülbject) ~ zwraca true jeśli otrzymanie licznych informacji o klasach, które obiekty są „równe” reprezentują. Przykładowe metody: final ize() - destruktor o forName(String) - zwraca obiekt klasy getCl ass() - zwraca obiekt opisujący daną Class Z danymi dotyczącymi klasy O kiasę nazwie podanej jako argument hashcode@ - zwraca kod do tablicy getFieldso ' ZWTaCa tablicę Z rozproszonej publicznymi polami danej klasy notify@ i notifynllo i Waite _ _) _ getComponentType() -jeśli klasa jest Sinżą do Synchronizacji miedzy wątkami tablicą to metoda ta zwraca obiekt klasy tostringo przedsmwia reprezenncję Class przedstawiający klasę, której obiekty obiektu w postaci łańcucha znaków Znajdują się W tablicy © 1008-2000 Jerzy Proficz, _jerpéüpggdzijrl 2l © 1008-2000 Jerzy Proficz, _ierp<ši'pg. gdzi„pl 22
  12. 12. Programowanie w Języku JAVA Programowanie w Języku JAVA Klasa String Klasa StringBuffer Klasa String reprezentuje łańcuch znaków. Każda sekwencja Znaków Zamknięta Klasa StringBuffer, w przeciwieństwie do cudzysłowami (”) jest interpretowana jako kiasy Stringi UmOŹiiWiH Zmianę iańcuchä obiekt tej klasy_ Ważniejsze metody: znaków skojarzonego z jej obiektem. W ` ` ` t d : lengthO - zwraca długość łańcucha aznleisze me O y o setCharAtüLt, char) - metoda charAtünżt) - zwraca znak z łańcucha _ _ _ _ _ zmieniaj ąca znak o podanym indeksie equalsO - porównuje znaki dwóch ciągów append(. . . ) - grupa metod indexoñ' ' ') ` grupa metod umożliwiających dopisywanie na koniec zwracaj ących indeks pierwszego (lub łańcucha kolejnego) wystąpienia danego znaku (podłańcucha) w łańcuchu insert (' ' ' ) i grupa metod umożliwiających wstawianie znakow do substring (. . . ) - grupa metod Środka łańcucha zwracaj ących podłańcuch _ _ revers e O - metoda odwracająca kolej ność concat (St ring) lub operator + - zwraca Znaków złączenie dwóch łańcuchów © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 23 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 24
  13. 13. Programowanie w Języku JAVA Aplikacja W języku Java Przykład: public glggg Hello{ public staĹtic m main(String[] argv){ System. out. println('Hello World! ”); o każda aplikacja musi zawierać klasę z definicją metody main, wywoływaną przy starcie aplikacji o argumentem funkcji main jest tablica ciągów znaków, będących listą argumentów wywołania aplikacji © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 25 Programowanie w Języku JAVA Słowa kluczowe (zastrzeżone) abstract byte char continue double final for implements int native package public static synchronized throws void © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl boolean case class default else finally gato import interface new private return super this transient volatile break catch const do if instanceof long null protected short switch throw try while 26
  14. 14. Programowanie w Języku JAVA Programowanie w Języku JAVA Korzystanie z pakietów Tworzenie pakietów Posługiwanie się klasami z pakietu bez jego importowania: D0 tworzenia pakietu służy słowo kluczowe pack age . java. uti1.Vector v = new java. uti1.Vector(); Import wszystkich klas i imterface”ów z pakietu java. awt (alejuż np. nie z pakietu Lacka@ Jurasám; java. awt event): Taa” Butmnl import javsnawt A; } Import tylko jednej klasy: import javajpplemxpplet; o jeden pakiet - jeden katalog z plikami klas o zagnieżdżenia pakietów odpowiadają W przypadku niejednoznaczności należy Zagmeżdżeniom katalogów Używać Pełnych nazw k135» 1113-3 o drzewo pakietów - katalogów - można import java. awt . *; import myawt w umieścić W jednym archiwum jar (ang. Java ARchive) java. awt. Button bl = g: java. awt. Button(); myawt. Button b2 = SœreateButtOnO; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 27 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 28
  15. 15. Programowanie w Języku JAVA Standardowe pakiety pakiet opis java. 'ava java 'ava. java. 'ava. 'ava. 'ava. ava. 'ava. java. applet . awt . beans io lang math net rmi security sql text _'avax. swing org . omg . CORBA tworzenie apletów GUI uniwersalne komponenty operacje wejścia/ wyjścia podstawowe klasy wielkie liczby współpraca z siecią przetwarzanie rozproszone bezpieczeństwo zapytania do baz danych operacje na tekście GUI przetwarzanie rozproszone © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 29 Programowanie w Języku JAVA Wyjątki Wyjątek jest to zdarzenie, które pojawia się podczas wykonywania programu i powoduje przerwanie normalnego przepływu sterowania (wykonywania kolejnych instrukcji). Wyjątki pojawiają się kiedy nastąpiła jakaś nieprawidłowa sytuacja (np. dzielenie przez 0). public static void mairüstring EI argv){ ilt x=10, y=0; x/ y; / / throws ArithmeticException Zalety wyjątków: o oddzielenie kodu obsługującego błędy o propagowanie błędu przez kolejne metody o mozliwość grupowania błędów © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 30
  16. 16. Programowanie w Języku JAVA Wyjątki - wysyłanie Program użytkownika może wysyłać wyjątki za pomocą słowa kluczowego throw, które powoduje przerwania działania metody. public g dosomethingœtring str){ äœtr . equals ("Noway")) throw E lllegalArgumentException( str); Większość wyjątków wymaga deklaracji możliwości ich wystąpienia w danej metodzie. Służy do tego słowo kluczowe throws. ii readO throws jaVa. io. IDException-( } © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Wyjątki - przechwytywanie Wyjątek można wysłać dalej (słowo kluczowe throws) lub przechwycić za pomocą konstrukcji 1E - catch. public i doSomethingGtring str) throws IOException( 1Ä{ Integer . parse Int (str) ; hggàülumberFonnatException e){ Ni! @I IOException(“wrong file name"); } Filestream fs = E FileStream(FN+str); Przy jednym wystąpieniu bloku tg może się znajdować kilka bloków catch. © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 32
  17. 17. Programowanie w Języku JAVA Wyjątki - blok finally Dodatkowy blok oznaczony finally jest zawsze wykonywany bez względu na to czy wystąpił wyjątek. public boolean dosomethingœtrean S){ try{ / / czytanie strumienia }L( . . . ){ / / pierwszy wyjątek lm( . . . ){ / / drugi wyjątek }ñnally{ / / zamknięcie strumienia Ęšlmuàn) s. c1ose(); © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Podział wyjątków ooo ooo Klasy wyjątków umożliwiają ich grupowanie. Przodkiem wszystkich klas jest klasa Throwable. System rozróżnia trzy grupy wyjątków, pochodzących od następujących klas: Error błędy systemu, nie powinny być używane Exception wymagana jest deklaracja throws RuntimeException nie wymagana jest deklaracja throws © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 34
  18. 18. Programowanie w Języku JAVA Wątki Wątek jest to pojedynczy, sekwencyjny przepływ sterowania W procesie. Stany W jakich może się znajdować wątek: New Thread - zaraz po stworzeniu Runnable - podczas wykonywania Not Runnable - zatrzymany D ead - z akończony © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 35 Programowanie w Języku JAVA Wątki - tworz enie o poprzez nadpisanie klasy Thread: public cli MyThread extends Thread{ public m m main(. ..){ w MyThreadO . start 0; } public void run(){ o poprzez implementacje interface”u Runnable: public cli MyThread implements Runnablei public static m main( . . . ){ Ę Threaü@ MyThreadO) . start O; } public void run(){ © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 36
  19. 19. Programowanie w Języka JAVA Atrybuty wątków Ciało wątku znajdują się tam wszystkie instrukcje jakie ma Wykonać wątek podczas swego życia i jest ono umieszczone W metodzie run() potomka klasy Thread lub interfacelu Runnable. Stan wątku Wskazuje co się dzieje z wątkiem: czy został uruchomiony, czy jest uśpiony, czy też już został zlikwidowany. Priorytet wskazuje „ważność” zadania reprezentowanego przez wątek, czym wyższy priorytet tym więcej czasu procesora jest mu przydzielane. Wątki demony dostarczają usług innym wątkom, aplikacja (aplet) kończy swoje działanie jeśli nie istnieją żadni klienci. © 1008-2000 Jerzy Proñcz, _jarr/ (šüpggdzrqrl Programowanie w Języku JAVA Grupy wątków wątek jest przydzielany do grupy podczas jego tworzenia w konstruktorze me to da ge tThr eadGr cup@ zwraca grupę wątku do grupy mogą należeć inne grupy możliwość wywołania metod obiektu klasy ThreadGroup zamiast Thread public static void main(. . . ){ ThreadGroup tg = g 'ThreadGroup ("MyGr"); fgüi i=1; i<10; i++) ngg Thread(tg, ngg MyThread()). start(); tg. suspendO; tg. resume(); tg. stopO; © 1008-2000 Jerzy Proficz, _jeżrjMšiy/ ggdzrpl 38
  20. 20. Programowanie w Jęzglcu JAVA Klasa Thread ( 1) Obiekty klasy Thread reprezentują wątki działające W aplikacji (aplecie). Pola: o MALPRIURITY - maksymalny priorytet jaki może mieć Wątek o MIN_PRIORITY - minimalny priorytet jaki może mieć wątek o NORl/ LPRIORITY - domyślny priorytet dla wątku Podstawowy konstruktor: o Thread(ThreadGroup , Runnable , String) ~ tworzy nowy wątek, należący do podanej grupy wątków, wykorzystujący obiekt klasy implementującej interface Runnable, oraz nadający mu nazwę © 1008-2000 Jerzy Proñcz, _jarr/ (šüpggdzrqrl Programowanie w Języku JAVA Klasa Thread (2) Metody statyczne: o currentThreadO - zwraca referencję do obecnie wykonywanego wątku o yield() - umożliwia przejęcie sterowania przez inne wątki s1eep(1dot s) - powoduje przerwanie działania Wątku na czas określony argumentem interrupted@ - sprawdza czy obecny wątek został przerwany - wymazuje znacznik przerwania wątku © 1008-2000 Jerzy Proficz, _jerp<ši'pg. gda„pl 40
  21. 21. Programowanie w Języku JAVA Programowanie w Języku JAVA Klasa Thread (3) Klasa Thread (4) Metody dynamiczna Metody dynamiczne (cd. ): o start () - powoduje iz wątek zaczyna Swoje dzianinie o setDaemon(boo1ean), isDaemonO - runO - metoda wywoływana przy ustawia, sprawdza czy dany wątek jest przej mowaniu kontroli demonem interrupt O - przerwanie działania wątku is Alive() - sprawdza czy wątek już (powoduje wystąpienie wyjątku) wystartował (metoda start ()), a jeszcze isInterrupted() - sprawdza czy Wątek się nie zakonczyi został przerwany setPriorityünt), getPriority() - destroyo _ niszczy Wątek bez ustawia, zwraca priorytet Wątku jakiegokolwiek uporządkowania setNameœtring), getName() - ustawia, join( . . . ) ~ oczekiwanie na śmierć wątku zwinna nazwę Wątku © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 41 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 42
  22. 22. Programowanie w Języku JAVA Sekcje krytyczne (1) Sposób synchronizacji dostępu do zasobów - sekcje krytyczne Obiekt może być użyty jedynie przez jeden wątek W danej chwili, o jeśli deklaracje metod, które są Wywoływane przez rózne Wątki były poprzedzone słowem kluczowym synchroni zed o wątek sam zablokował obiekt tą instrukcją public class CS: ( public synchronized void useResource1(){ / / korzystanie z zasobu } static void useResource2(CS r){ synchronized(r){ } © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Sekcje krytyczne (2) Pojedynczy wątek może wejść do kilku metod synchronizowanych (sekcji krytycznych) jednego obiektu i nie zostaje zablokowany: class public CS{ public synchronized void m1(){ System. out . pint1n(" Jestem w m1()"); m2 0; l' public synchronized void m2(){ System. out . pint1n( "Jestem w m20" ); © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 44
  23. 23. Programowanie w Jęzglcu JAVA Monitory Z każdym obiektem jest domyślnie skojarzona jedna zmienna typu condition znana z tradycyjnych monitorów. Obiekt można wykorzystac' jako monitor używając metod: o wait( . . . ) - zatrzymuje wątek, zwalniając monitor o notify@ - zwalniajeden (przypadkowy) wątek czekający w metodzie wait (. . . ) W danym monitorze o notifyAll O - zwalnia wszystkie wątki czekające W metodzie wait(. .. ) Wywołanie powyższych metod może nastąpić tylko W metodzie obiektu poprzedzonej słowem kluczowym synchronized lub w bloku zablokowanym za pomocą tej instrukcji. © 1008-2000 Jerzy Proñcz, _jarr/ (šüpggdzrqrl 45 Programowanie w Języku JAVA Przykład: producent - konsument public class ProdConiĆ private int contents = -1; public synchronized imi? get O throws InterruptedExceptiorrĹ while (contents = = -1) waitO ; ¶ result = contents; notifyAllo; return result; public synchronized m put(int new_c) throws InterruptedExceptiorrĹ while(contents ! = -1) waitO ; contents = new_c; notifyAllO; © 1008-2000 Jerzy Proficz, _jetrjr<ši*jrg. gdzr„pl 46
  24. 24. Programowanie w Języku JAVA Operacje wejścia-wyjścia Dwie grupy klas pakietu java. 10.* umożliwiających operacje wejścia-wyjścia: o podstawowe, takie które dostarczają prostych usług (odczyt i zapis bajtów lub znaków, Względnie obiektów) filtrujące, zawierające dodatkowe udogodnienia (jak np. buforowanie), aby stworzyć obiekty tych klas potrzebne są istniejące obiekty wejścia-wyjścia (np. klas podstawowych) Dwa rodzaje źródeł danych: o binarne (strumienie) o znakowe („pisarze” i„czytelnicy”) © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 47 Programowanie w Języku JAVA Operacje zapisu binarnego (1) Strumienie podstawowe: o Output Stream abstrakcyjna klasa zawierająca deklaracje podstawowych operacji zapisu bajtów o Fi leüutput Stream klasa umożhwiająca przeprowadzanie prostych operacji zapisu do pliku o ByteArrayüutputstream klasa umożliwiająca używanie tablicy bajtów (byte[]) jako strumienia wyjściowego © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 48
  25. 25. Programowanie w Języku JAVA Programowanie w Języku JAVA Operacje zapisu binarnego (2) o PipedOutputStream klasa umożliwiająca implementację potoków Operacje odczytu binarnego (1) o Dbjectüutputstream klasa umożliwiająca zapis całych obiektów Strumienie filtrujące: o Filterüutputstream abstrakcyjna klasa rodzic wszystkich klas reprezentujących wyjściowe strumienie filtruj ące DataOutputStream klasa umożliwiająca Zapis Wartości typów prostych o Inputstream abstrakcyjna klasa zawierająca deklaracje Buffa redU utputStre am klasa podstawowych operacji odczytu bajtów umożliwiająca buforowanie Print Stream formatowane wyjście, umożliwia zapis znakowy, zalecana tylko do debug'owania, zamiast niej należy używać klasy Printwr iter © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 49 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 50
  26. 26. Programowanie w Języku JAVA Operacje odczytu binarnego (2) Strumienie podstawowe: o F ilelnput Stre am klasa umożliwiająca przeprowadzanie prostych operacji odczytu z pliku PipedInputStream klasa umożliwiająca implementację potoków ByteArrayInputStream klasa umożliwiająca używanie tablicy baj tów (byte [l ) jako strumienia wejściowego SequenceInput Stream klasa pozwalaj ąca połączyć kilka strumieni wejściowych StringBufferInputStream klasa niezalecana, wjej miejsce należy używać klasy StringReader DbjectInputStream klasa umożliwiająca odczyt całych obiektów © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Operacje odczytu binarnego (3) Strumienie filtruj ące: o Filterlnputstream abstrakcyjna klasa rodzic wszystkich klas reprezentuj ących wejściowe strumienie filtrujące DataInputStream klasa umożliwiająca odczyt typów prostych BufferedInputStream klasa umożliwiająca buforowanie PushBackInputStream klasa umożliwiająca zwrócenie odczytanych danych LineNumberInputStream klasa niezalecana, wjej miejsce należy używać klasy LineNumberRe ader © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 52
  27. 27. Programowanie w Języku JAVA Operacje zapisu znakowego (1) o writer abstrakcyjna klasa zawieraj ąca deklaracje podstawowych operacji zapisu z naków o Pipedwrit er klasa umożliwiająca implementację potoków o CharArraywrit er klasa umożliwiająca pisanie do tablicy znaków char [l © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Operacje zapisu znakowego (2) St ringwrit er klasa umożliwiająca pisanie do łańcucha znaków StringBuff er Output Stre amwr iter klasa umożliwiająca stworzenie obiektu klasy writer z obiektu klasy DutputStream Filewriter klasa umożliwiająca przeprowadzanie prostych operacji zapisu do pliku tekstowego Bufferedwriter klasa umożliwiająca buforowanie (klasa filtruj ąca) Pr intwrite r formatowane wyj śc ie Fi lterwrit er umożliwia tworzenie filtrujących klas writer © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 54
  28. 28. Programowanie w Języku JAVA Programowanie w Języku JAVA Operacje odczytu znakowego (1) Operacje odczytu znakowego (2) InputStreamReader klasa umożliwiająca stworzenie obiektu klasy Reader z obiektu klasy InputStream Fi leRe ader klasa umożliwiająca przeprowadzanie prostych operacji odczytu z pliku tekstowego Kl t : asy pms e BufferedRe ader klasa umożliwiająca o Reader abstrakcyjna klasa zawieraj ąca buforowanie deklaracje podstawowych operacji odczytu LineNumberReader klasa licząca z nakow _ o dcz ytywane wiersze P ipedRead er klasa umoż liwiaj ąca implementację potoków Klasy ñltruj ące: o Fi lterRead er klasa umożliwiająca tworzenie filtrujących klas Reader CharArrayReader klasa umożliwiająca czytanie z tablicy znaków charIĹ] StringReader klasa umożliwiająca ° pushBackRe ader klasa filtrująca czytanie z łańcucha znaków String umożliwiająca Zwrócenie odczytanych danych © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 55 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 56
  29. 29. Programowanie w Języku JAVA Kopiowanie pliku - przykład public static void mairrœtringf] argvH BufferedInputStream fin = g! BufferedIrrputStream( g! File Inputstreamürrgv [O] ) ) ; Bufferedüutputstream fout = g! Bufferedüutputstream( i! Fi1eDutputStream(argv [1] )); int b; whi1e((b= firr. read()) ! =-1) fout. write((byte)b); fout . c1ose(); fin. closeo; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 57 Programowanie w Języku JAVA Złączenie plików - przykład public static void mairüstringü argv){ ListüfFiles filelist = ni! ListüfFilesürrgv); Bufferedlnputstream bis = g: Bufferedlrrputstream( g: Sequencelnputstreamüilelist)); Bufferedüutputstrean bos = g: Buiferedüutputstrearüsystem. out); iLt b; while( (b= bis . read()) ! =-1) bos. write((byte)b); bos . c1ose(); bis. c1ose(); © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 58
  30. 30. Programowanie w Jęzglcu JAVA Usuwanie znaku “r° z pliku - przykład public static void main(StringĹl argvH BufferedReader br = new BufferedReader( new FileReader (argv [O] N; Bufferedwriter bw = new Bufferedwriter( new Filewriter (argv [1] N; iĄt Ch; whi1e((ch= br. read()) ! =-1) i_f(Ch! ='I') bbw. write((di)ch); br. close(); bw. close(); © 1008-2000 Jerzy Proficz, _jerr/ (šüpggdziqil 50 Programowanie w Języku JAVA Liczenie Wierszy W pliku - przykład public static void main(StringĹ] argv){ LineNumberReader ln = g: LineNumberReader( g: BufferedReader( g: FileReader(argvĹOĹI))); while(ln. readLine O ! =null); Printwriter cout = new Printwriterœystemput, true); cout . println(ln. getLineNmnber()); ln. close(); cout . close O; © 1008-2000 Jerzy Proficz, _1erp<ši*pg. gd1i„pl 60
  31. 31. Programowanie w Języku JAVA Programowanie w Języku JAVA Potoki - przykład (1) Potoki - przykład (2) Aplikacja równoległa składaj ąca się z dwóch wątków producentów (ciągów znaków) oraz jednego konsumenta (drukującego te ciągi). Do TClass Prmiuœr mimplemnts Runnablü przekazywania ciągów wykorzystane są potoki. piPedüutputstream P°53 public Producer(Pipedüutputstream posH _ _ this. pos = pos; public class Pipe{ } public i gi nainœcringü argv) Public void run(){ throws IllException{ try{ Pipedüucputstream pos = E PipedllutputScreamO; Tjcr (byte i=0; i<10; i++){ PipedIrrputStream pis = E PipedInpucStream(po= ); Tpos . write 3 Thread prodl = Ź Thread(g Producer(po= )); ThreatLyiej-do? Thread prod2 = Ź Thread(g Producer(pos)); l Thread prin = ggg Thx-eam@ Princer(pis)); posxlloseoš Prod1.start(); }catch(IOExceptim e){ prada juno; System. err. println("Producer: "+e); prin. start O; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 61 © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 62
  32. 32. Programowanie w Języku JAVA Potoki - przykład (3) class Printer implements Runnable( PipedInputStream pis; public Printer(PipedInputStrean pisH: this. pis = pis; } public void run(){ m b; mł while((b= pis . read()) ! =-1) System. out . println (b); pis . close 0; catch(IOException e){ Systemerr. printlnWPrinter: "+e); © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Object Serialization Java posiada mechanizm umozliwiający W łatwy sposób zapisywanie obiektów dowolnych klas do strumienia (ang. Object Serializatźan) klasa, której obiekty mają być przesyłane, powinna implementować interface Serializable, który nie zawiera deklaracji zadnych metod podczas przesyłania zawartości obiektu nie są brane pod uwagę pola oznaczone modyfikatorem static (nie sąto pola obiektu, ale klasy) oraz transient (nie mają wpływu na stan obiektu) do zapisywania i odczytu obiektów ze strumienia służą metody obiektów klas: Object OutputSt ream i Object Inputstream © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 64
  33. 33. Programowanie w Języku JAVA Object Serialization - przykład class MyData implements Serializable{ l' public static void main(StringĹl argvH FileInputStremn is = new FilelnputStreamWdata. bin”); ObjectInputStream ois = new ObjectInputStreanüs); MyData myData = (MyData)ois. read(); ois. close(); / / praca z obiektem FileDutputStream os = new FileDutputStream("data. bin"); ObjectDutputStream oos = @I DbjectDutputStreamhs); oos . write (myData); oos . close O; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl Programowanie w Języku JAVA Inne klasy pakietu java. io File klasa, której obiekty są kojarzone z plikami, zawiera wiele pożytecznych metod, pozwalających na pracę z plikami, takie jak sprawdzenie praw dostępu, tworzenie katalogów, sprawdzenie typu pliku, przeglądanie katalogu, ścieżka do pliku etc. FileDescriptor umożliwia obsługę deskryptorów plików systemu operacyjnego RandomAccesFile obiekty tej klasy umożliwiają dostęp do dowohrej części pliku St reamTokenizer klasa pomagająca przy odczycie plików tekstowych i przekształcaniu ich zawartości na wartości liczbowe © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 66
  34. 34. Programowanie w Języka JAVA St re amTo keniz er - przykład public static void main(StringĹl argvH FileInputStream is = new FileIrrputStreamWdataJoni"); StreamTokenizer st = StreamTokenizer( new BufferedReader( new InputStreamReaderüs) )) ; st. commentChar('#'); // komentarze st. quoteChar(""); // znak cytowania while(st. nextToken() ! = StreamTokenizer . 'I'I`_EOF){ switch(st. ttype){ case StreamTokenizerJTJnlORD: // token jest słowem: st. sval case StreamTokenizer . TT_NUMBER: // token jest liczbą: st. nval © 1008-2000 Jerzy Proñcz, _jerp<ši'pg„gdzr. pl 67 Programowanie w Języku JAVA Współpraca z siecią (1) Obsługiwane pro okoły: o URL (ang. Uniform Resource Locator) umożliwia wszechstronne korzystanie z usług warstwy aplikacji takich jak protokół HTTP (ang. Hyper Text Transfer Protocol), język Java udostępnia mechanizmy daleko ułatwiaj ące korzystanie z tych protokołów TCP (ang. Transmission Control Protocol) dostarcza usług przesyłania danych z kontrolą połączenia na poziomie warstwy transportowej, język Java wspiera korzystanie z tego protokołu poprzez klasy: Socket i So cket Server © 1008-2000 Jerzy Proficz, _jetrp<ši*pg. gdzr„pl 68
  35. 35. Programowanie w Języku JAVA Współpraca z siecią (2) o UDP (ang. User Datagram Protocol) dostarcza usług przesyłania danych bez kontroli połączenia na poziomie warstwy transportowej, język Java wspiera korzystanie z tego protokołu poprzez klasy: Datagramsocket i DatagramPacket Klasy wspierające obsługę połączeń sieciowych znajdują się w pakiecie java. net, jednak zwykle używane są również klasy wejścia-wyjścia. import java. net. *; import java. io. *; © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 69 Programowanie w Języku JAVA Klasy obsługujące pracę W sieci (1) o InetAdderess klasa, której obiekty reprezentują adresy IP URL: o URL obiekty tej klasy reprezentują wskaźniki na zasoby WWW o URLConnection abstrakcyjna klasa reprezentująca połączenia pomiędzy aplikacją (apletem) a zasobami WWW - HttpURLConnection klasa reprezentująca połączenia HTTP o URLEnc oder umożliwia kodowanie łańcuchów znaków © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 70
  36. 36. Programowanie w Języka JAVA Klasy obsługujące pracę W sieci (2) TCP: o SocketServer klasa umożliwiająca używanie gniazdek TCP po stronie serwera o Socket klasa umożliwiająca używanie gniazdek TCP po stronie klienta UDP: o DatagramS ocket klasa umożliwiająca używanie gniazdek UDP - Multicastsocket klasa umożliwiająca wysyłanie okólników o DatagramPacket klasa, której obiekty reprezentują pakiety UDP © 1008-2000 Jerzy Proñcz, _jerr/ (šüpggdzrqd 7l Programowanie w Języku JAVA URL - czytanie - przykład public static void main(StringĹl argvH URL url = @I URL(”łrttp: ", "www. eti. pg. gda. pl", “index. tl1rnl"); InputStream is = url. openStream(); BufferedRea/ der br = @I BufferedReader( @I lnputStreamReaderüsll ; Printwriter cout = new Printwriterœystemout); String line; while( (line= br . readLine (l) ! =null) cout . printlrr(line); br. closeO; cout . close O © 1008-2000 Jerzy Proficz, _jetrp<ši*pg. gdzr„pl 72
  37. 37. Programowanie w Języku JAVA URL - czytanie i zapis - przykład public static void main(String| Ĺl argv){ URL url = g! URL("łrttp: //. . . /cgi-bin/ . . 3'); URLConnect ion connect = url. openConnection O; Printwriter pw = new Printwriter( cOnnecLgetOutPutSŁreamO, true); pw. close() BufferedReader br = i} BufferedReader( g! InputStreamReader( connect . get InputStreamO )) ; br. close(); © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 73 Programowanie w Języku JAVA TCP - echo - przykład (1) public static void main(Str: LngĹ] argv){ ił port= Integer. parselnñargvĹül); ServerSocket server Ę ServerSockeNport); whi1e(true){ final Socket client r servenaccepto; E Threadog Rumabieo( public g rurr(){ BufferedReader br = Ę BufferedReader( g InputStreamReader( client. get InputStreamO )) ; PrintHriter pw = nas PrintHriter( ü nutputstreamwriter( client. getüutput Strsam0) . truelš String line; while( (1ine= br. readLine( )) ! =nu11) pmprintlnüins); pmclose O; bnclosa O; client . c1ose(); } }). staxt(); © 1998-2000 Jerzy Proñcz, jerp@pg. gda. pl 74
  38. 38. Programowanie w Języku JAVA TCP - echo - przykład (2) public class So ckcl( public static void rIain(String[l aIgVH String host = argvml; int port = Integer. parseInt(aIgVĹ1]); Socket echo = E socketürost, port); BufferedReader cin = g BufferedReader( E InputStreamReader(System. in))š Printwriter cout = new Printwriter( neu DutputStreamWriter(Śystermout) , true); BufferedReader sin = g BufferedReader( g InputStreamReaderœcho. getInputStreamO)); Printwriter sont = new Printwriter( new OutputStreamWriter( echogetüutputstreamo), true); String line; müline= cirn readLineo) ! =w) i sout . print1n(1ine); cout . println(sin. readl. ine 0 ); ł sout. close 0; sin. close(); echo. close 0; © 1998-2000 Jerzy Proñcz, _ier'p@pg„gdzr. pl 75 Programowanie w Języku JAVA UDP - odsyłanie pakietu, serwer - przykład public static void nrainœtringü argv){ inżt port= Integer. parseInt (argv ĹOĹI); byteĹl data = g byte E2561; DatagramSocket ds = kwnew DatagramSocket (port); DatagramPacket dt = kwnew DatagramPacket (data, datalength); while (true) { ds. receive(dt); ds. send (@ DatagramPacket (data, dt . getLength(), dt . getAddress O , dt . getPort () ) ); © 1998-2000 Jerzy Proficz, jerp@pg. gda„pl 76
  39. 39. Programowanie w Języku JAVA UDP - odsyłanie pakietu, klient - przykład public static void main(StringĹl argv){ iit portánteger. parseInt(argv[0]); byteĹĹI data= {1, 2, 3}; Datagramsocket ds g Datagramsockeü); DatagramPacket dp datanlength, InetAddress. getEyNameOrost), port); g DatagramPacketQiata, ds. send(dp); ds. setSoTimeout (1000); “żr” ds. receive (dp) s System. out . print1n("l-lost "+host+" is alive. "); łcacdüjavadrplülšärceptian e){ System. out. printl. n("l-lost "+host+“ isn't alive. "); ł ds. close (); © 1998-2000 Jerzy Proficz, jerp@pg. gda. pl 77

×