Úvod do programovacích jazyk˚ u (Java), 9/12 Balí ˇ cky (packages) Výjimky Proudy (Stream) Parametry pˇ ríkazové ˇ rádky Úvod do programovacích jazyk˚ u (Java) Michal Krátký Katedra informatiky VŠB–Technická univerzita Ostrava Úvod do programovacích jazyk˚ u (Java), 2007/2008 c 2006–2008 Michal Krátký Úvod do programovacích jazyk˚ u (Java) 1/39
39
Embed
Úvod do programovacích jazyku˚ (Java)Úvod do programovacích jazyku˚ (Java), 9/12 Balícky (packages)ˇ Výjimky Proudy (Stream) Parametry pˇríkazové ˇrádky Balícky 2/2ˇ
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Balícky jsou skupiny tríd a rozhraní.Umožnují vyhnout se konfliktum ve jménech tríd.Balícek muže obsahovat trídy, rozhraní a další balícky(pod-balícky).Každý balícek má jméno. Celé jméno balícku obsahujeteckami oddelený seznam nad-balícku až k danémubalícku.Napr.: java.lang, com.sun.security,drawing.figures.
Každá trída nebo rozhraní má normativní jméno (canonicname) obsahující balícek ke kterému náleží a jméno trídynebo rozhraní. Napr. drawing.figures.Line.Pro dve ruzné trídy nebo rozhraní mužeme použít stejnéjméno pokud náleží k ruzným balíckum (a mají tedy ruznánormativní jména).Napr. v balícku project.graphics definujeme jinoutrídu Line s normativním jménemproject.graphics.Line.Vždy mužeme použít normativní jméno trídy neborozhraní, když se odkazujeme na trídu nebo rozhraní.Napr. drawing.figures.Line line = newdrawing.figures.Line();
Jména balícku korespondují s adresári v adresárovéstrukture.Napr. trída drawing.figures.Line je uložena v souboru:drawing/figures/Line.java (Unix) resp.drawing\figures\Line.java (MS Windows).Soubory obsahující trídy z nepojmenovaného balícku jsouuloženy v aktuálním adresári.
Pokud se odkazujeme na trídu nebo rozhraní z jinéhobalícku, mužeme použít její normativní jméno.Napr. drawing.figures.Line line = newdrawing.figures.Line();
Mužeme ovšem použít deklaraci import, která námumožnuje odkazovat se na trídy a rozhraní z tohoto balíckupouze jednoduchým jménem.Dva typy deklarace import:
Jednoduchá - importujeme pouze jednu trídu neborozhraní. Napr.: import drawing.figures.Line;Složená deklarace (on demand) – importujeme všechnyverejné trídy a rozhraní z balícku.Napr.: import drawing.figures.*;
Pro ošetrení chyb poskytuje Java mechanismus zvaný výjimky(Exceptions):
Když nastane v programu chyba, program vygenerujeudálost – výjimku.Beh programu je prerušen a runtime hledá kód ošetrujícípríslušný typ chyby – exception handler.Poznámka: objekt nesoucí informaci o události je takénazýván výjimka.
Je vytvoren objekt výjimky, který obsahuje informace ovýjimce (typ, stav programu, . . . ).Beh programu je prerušen.Runtime hledá kód ošetrující chybu.Kód zachycující výjimku se nazývá exception handler(catch).Výber handleru závisí na typu objektu výjimky.Zachytávání výjimek se skládá ze trí bloku: try, catch afinally
catch ( SomeThrowableObject variableName ) {. . . / / p r i kazy}
Za try muže nasledovat nekolik bloku catch, ale nejvýšejeden blok finally.Promenná variableName je jméno výjimky na které semužeme v kódu odkazovat.Platnost této promenné je v bloku try.Promenná muže být použita jako jiné lokální promenné,napr. variableName.getMessage();
Blok finally poskytuje mechanismus umožnujícívykonání kódu bez ohledu na to zda v bloku try nastalanebo nenastala výjimka.Príkazy v bloku finally jsou vykonány pokud:
Blok try je standardne ukoncen.V bloku try nastane výjimka, která je ošetrena jedním zhandleru.V bloku try nastane výjimka, která není ošetrena žádnýmhandlerem.
t ry {. . . / / o t e v r i soubor a zapis do ne j
} f i n a l l y {i f ( f i l e ! = nul l ) f i l e . c lose ( ) ;
Metody nemusí ošetrovat všechny výjimky, mohou vyvolatvýjimku k volané metode.Pokud výjimka typu T muže být vyvolána v metode ametoda neošetruje výjimku typu T, pak musímespecifikovat, že metoda muže vyvolat výjimku typu T.K tomuto úcelu použijeme klícové slovo throw v hlaviccemetody:
public void readF i l e ( S t r i n g f i lename )throws IOExcept ion
{. . .throw new IOExcept ion ( ) ; / / v y t v o r e n i vy j imky
Program casto potrebuje císt nebo zapsat data z/doexterních zdroju.Data muže obsahovat soubor na disku, soubor na síti, blokpameti atd.Proudy reprezentují abstrakci umožnující sekvencní ctení azápis dat.Pri použití proudu mužeme pristupovat k datum bez ohleduna to z jakého zdroje je cteme popr. zapisujeme.
Reader i n = new Fi leReader ( " i npu t . t x t " ) ;Wr i t e r out = new F i l e W r i t e r ( " output . t x t " ) ;i n t c ;while ( ( c = i n . read ( ) ) > = 0 ) {
out . w r i t e ( c ) ;}i n . c lose ( ) ;out . c lose ( ) ;
Ctení data byt po bytu není príliš efektivní. Snažíme se tedycíst data po vetších blocích.
InputStream i n = new Fi le InputSt ream ( " i npu t . t x t " ) ;OutputStream out =
new Fi leOutputStream ( " output . t x t " ) ;f i n a l i n t BUFFER_LENGTH = 8192 ;byte [ ] buf = new byte [BUF_LEN ] ;i n t l ;while ( ( l = i n . read ( buf , 0 , BUF_LEN) ) > = 0 ) {
out . w r i t e ( buf , 0 , l ) ;}i n . c lose ( ) ;out . c lose ( ) ;
Instance trídy java.io.File reprezentuje soubor nasouborovém systému. Pokud vytvoríme instanci trídy File pronejaký soubor, mužeme zjišt’ovat následující informace:
Plné jméno souboru.Jméno rodicovského adresáre.Zda se jedná o soubor nebo adresár.Zda je zadán absolutne nebo relativne.Zda existuje.Velikost souboru.Prístupová práva (ctení, zápis).Cas modifikace, zda je skrytý apod.
Vytvárení souboru.Rušení souboru.Prejmenování souboru.Vylistování adresáre.Vytvorení podadresáre.Nastavení casu modifikace.Vytvorení pomocných souboru (temporary files).
S t r i n g f i lename = " t e s t . t x t " ;F i l e f = new F i l e ( f i lename ) ;boolean ok = f . de le te ( ) ;System . out . p r i n t l n ( ok ? "O.K . " : " Not de le ted " ) ;
Ve tríde System jsou definovány tyto trídní konstantnípromenné:
in - standardní vstup (InputStream), implicitneklávesnice.out - standardní výstup (PrintStream), implicitneobrazovka.err - standardní chybový výstup (PrintStream).
Všechny tyto proudy jsou implicitne otevrené a nemohou býtuzavreny.Všechny tyto proudy je možné presmerovat.
$ java ClassName < inpu t . t x t > output . t x t$ java ClassName < inpu t . t x t | l ess
Ctení a zápis primitivních datových typu –DataInputStream, DataOutputStream.Náhodný prístup k datum – RandomAccessFile.(PrintStream).BufferedInputStream, BufferedOutputStream.