Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Úvod do programovacích jazyku (Java)
Michal Krátký
Katedra informatikyVŠB–Technická univerzita Ostrava
Úvod do programovacích jazyku (Java), 2007/2008
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 1/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Balícky (Packages) 1/2
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.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 2/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Balícky 2/2
Balícek ke kterému trída prísluší je specifikován nazacátku souboru, napr.:
package drawing . f i g u r e s ;
class Line extends Figure {. . .}
Trída náleží do balícku drawing.figures.Pokud na zacátku souboru nespecifikujeme žádný balícek,pak trída náleží ke speciálnímu nepojmenovanémubalícku.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 3/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Normativní jména tríd a rozhraní
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();
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 4/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Verejné trídy a rozhraní
Pouze trídy a rozhraní deklarované jako public jsouprístupné z jiných balícku.Napr. trída drawing.figures.Line:
package drawing . f i g u r e s ;public class Line extends Figure { . . .
je prístupná ve všech balíccích.Pokud chceme, aby byla trída prístupná pouze ve trídách arozhraních balícku package drawing.figures,deklarujeme:
package drawing . f i g u r e s ;class Line extends Figure { . . .
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 5/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Hierarchie balícku
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.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 6/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Deklarace import
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.*;
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 7/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Java API
API – Application Programming Interface.Množina tríd, kterou má programátor k dispozici, soucásti:
java.io.* – vstup/výstup....
Ke každé tríde nalezneme v dokumentaci definovanéatributy a metody.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 8/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky (Exceptions)
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.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 9/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, príklad
public s t a t i c void main ( S t r i n g [ ] args ) {t ry {
i n t pole [ ] = new i n t [ 3 ] ;. . .i n t a = pole [ 5 ] ;
}catch ( ArrayIndexOutOfBoundsException e ) {
System . e r r . p r i n t l n ( " Chyba " ) ;}
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 10/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky
Když nastane 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
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 11/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky
Syntaxe:
t ry {. . .
} catch ( . . . ) {. . .
} catch ( . . . ) {. . .
} f i n a l l y {. . .
}
Za try blokem musí následovat nejméne jeden blok catchnebo finally.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 12/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, blok try
Syntaxe:
t ry {. . . / / p r i kazy}
Blok try definuje platnost handleru.Pokud výjimka nastane v bloku try, výjimka je ošetrenapríslušným handlerem asociovaným s tímto blokem.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 13/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, blok catch
Syntaxe:
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();
Konvence: Casto tuto promennou pojmenováváme e.c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 14/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, blok finally
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 ( ) ;
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 15/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, metody
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
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 16/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Výjimky, hierarchie výjimek
Pomocí dedicnosti mužeme vytváret vlastní výjimky(predekThrowable), výhody:
Seskupování chybových typu.Zjemnování chybových stavu.
public class StackExcept ion extends Except ion {public StackExcept ion ( S t r i n g message ) {
super ( message ) ;}
}public class EmptyStackException extends
StackExcept ion {public EmptyStackException ( ) {
super ( " Zasobnik j e prazdny . " ) ;}
} c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 17/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy (Stream)
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.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 18/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy
Rozlišujeme dva typy proudu:vstupní proudy – pro ctení dat,výstupní proudy – pro zápis dat.
Pro ctení a zápis dat používáme podobná schémata:
Otevrení proudu.Dokud jsou v proudu data, cti. / Dokud jsou data, zapisuj.Uzavrení proudu.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 19/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy
Balík java.io obsahuje kolekci tríd pro práci s proudy.Trídy rozdelujeme do dvou hierarchií:
Binární proudy – pracují s proudy binárních dat. Podtrídytríd:
InputStream - vstupní proud,OutputStream - výstupní proud.
Znakové proudy – pracují s proudy znaku. Podtrídy tríd:Reader - vstupní proud,Writer - výstupní proud.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 20/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy, metody
InputStream:
i n t read ( )i n t read ( byte [ ] b )i n t read ( byte [ ] b , i n t o f f , i n t l en )
OutputStream:
void w r i t e ( i n t b )void w r i t e ( byte [ ] b )void w r i t e ( byte [ ] b , i n t o f f , i n t l en )
Reader:
i n t read ( )i n t read ( char [ ] cbuf )i n t read ( char [ ] cbuf , i n t o f f , i n t l en )
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 21/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy, metody
Writer:
void w r i t e ( i n t c )void w r i t e ( char [ ] cbuf )void w r i t e ( char [ ] cbuf , i n t o f f , i n t l en )
Další metody: Všechny trídy obsahují metodu close().Tato metoda je bud’ volána explicitne nebo implicitne prirušení objektu garbage collectorem.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 22/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Proudy, metody
Trídu InputStream a Reader obsahují metody:
long sk ip ( long n ) / / preskoceni n bytuboolean markSupported ( )/ / oznaceni ak tua ln iho bytuvoid mark ( i n t readAheadLimit )void rese t ( )
Trídy OutputStream a Writer obsahují metodu:
void f l u s h ( ) / / vyprazdneni buferu
Vetšina metod pracující s proudy vyhazuje výjimkujava.io.IOException nebo nekterou z jejich podtríd.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 23/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Souborové proudy 1/3
Souborové proudy ctou nebo zapisují do souboru nasouborovém systému.
FileInputStreamFileOutputStreamFileReaderFileWriter
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 24/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Souborové proudy 2/3
Príklad:
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 ( ) ;
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 25/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Souborové proudy 3/3
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 ( ) ;
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 26/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Trída File 1/2
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.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 27/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Trída File 2/2
Instanci trídy java.io.File mužeme použít pro:
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 " ) ;
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 28/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Standardní vstup a výstup
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
Ukoncení vstupu: ^Z (Windows), ^D (Linux).c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 29/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Další trídy
Ctení a zápis primitivních datových typu –DataInputStream, DataOutputStream.Náhodný prístup k datum – RandomAccessFile.(PrintStream).BufferedInputStream, BufferedOutputStream.
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 30/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, DoubleArray.java 1/4
package s t reamtes t ;
public class DoubleArray{
double mArray [ ] ;
public DoubleArray ( i n t capac i t y ){
mArray = new double [ capac i t y ] ;}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 31/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, DoubleArray.java 2/4
public void setValue ( i n t index , double value ){
mArray [ index ] = value ;}
public double getValue ( i n t index ){
return mArray [ index ] ;}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 32/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, DoubleArray.java 3/4
public void p r i n t ( ){
for ( i n t i = 0 ; i < mArray . leng th ; i ++){
System . out . p r i n t ( mArray [ i ] + " " ) ;}System . out . p r i n t ( " \ n " ) ;
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 33/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, DoubleArray.java 4/4
public void s o r t ( ){
for ( i n t i = 0 ; i < mArray . leng th ; i ++){
for ( i n t j = 0 ; j < mArray . length −1 ; j ++){
i f ( mArray [ j ] > mArray [ j +1 ] ){
double tmp = mArray [ j ] ;mArray [ j ] = mArray [ j + 1 ] ;mArray [ j + 1 ] = tmp ;
}}
}}
}c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 34/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, StreamApp.java 1/4
package s t reamtes t ;
public class StreamApp{
DoubleArray mDoubleArray ;
public StreamApp ( ) {mDoubleArray = new DoubleArray ( 1 0 ) ;
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 35/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, StreamApp.java 2/4
public s t a t i c void main ( S t r i n g [ ] args ){
new StreamApp ( ) . Run ( ) ;}
public void Run ( ){
read ( ) ;mDoubleArray . p r i n t ( ) ;mDoubleArray . s o r t ( ) ;mDoubleArray . p r i n t ( ) ;
}
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 36/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, StreamApp.java 3/4
private void read ( ){
f i n a l i n t l eng th = 1024 ;i n t ar ray [ ] = new i n t [ l eng th ] ;i n t i = 0 ;
t ry{
while ( ( a r ray [ i + + ] = System . i n . read ( ) ) ! = −1 ){ }
}catch ( Except ion e ){ }
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 37/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Príklad, StreamApp.java 4/4
S t r i n g s t r = " " ;i n t countOfNumber = 0 ;/ / 4 5 6 4 8 1 . . .for ( i n t j = 0 ; j < i ; j + + ) {
i f ( a r ray [ j ] = = ’ ’ | | j == i −1) {double v = Double . parseDouble ( s t r ) ;mDoubleArray . setValue ( countOfNumber ++ , v ) ;s t r = " " ;
}else {
s t r + = ( char ) a r ray [ j ] ;}
}} }
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 38/39
Úvod do programovacích jazyku (Java), 9/12
Balícky (packages)VýjimkyProudy (Stream)Parametry príkazové rádky
Parametry príkazové rádky
Parametry predávané programu pri spouštení, napr.:
java ca tes t . App 1 9 4 5 6
Parametry jsou prístupné pres pole retezcu predávanémetode main jako parametr.
public s t a t i c void main ( S t r i n g [ ] args ){
. . ./ / args [ 0 ] = 1 , args [ 1 ] = 9 , . . .
c©2006–2008 Michal Krátký Úvod do programovacích jazyku (Java) 39/39