Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/21
Balíčky (Packages) 1/2 Balíčky jsou skupiny tříd a rozhraní. Umožňují vyhnout se konfliktům ve jménech tříd. Balíček může obsahovat třídy, rozhraní a další balíčky (pod-balíčky). Každý balíček má jméno. Celé jméno balíčku obsahuje tečkami oddělený seznam nad-balíčků až k danému balíčku. Např.: java.lang, com.sun.security, drawing.figures. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/21
Balíčky 2/2 Úvod do programovacích jazyků (Java), 8 Balíček ke kterému třída přísluší je specifikován na začátku souboru, např.: package drawing. f i g u r e s ; class Line extends Figure... Třída náleží do balíčku drawing.figures. Pokud na začátku souboru nespecifikujeme žádný balíček, pak třída náleží ke speciálnímu nepojmenovanému balíčku. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/21
Normativní jména tříd a rozhraní 1/2 Každá třída nebo rozhraní má normativní jméno (canonic name) obsahující balíček ke kterému náleží a jméno třídy nebo rozhraní. Např. drawing.figures.line. Pro dvě různé třídy nebo rozhraní můžeme použít stejné jméno pokud náleží k různým balíčkům (a mají tedy různá normativní jména). Např. v balíčku project.graphics definujeme jinou třídu Line s normativním jménem project.graphics.line. Normativní jméno třídy nebo rozhraní z nepojmenovaného balíčku je pouze jméno této třídy nebo rozhraní. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/21
Normativní jména tříd a rozhraní 2/2 Vždy můžeme použít normativní jméno třídy nebo rozhraní, když se odkazujeme na třídu nebo rozhraní. Např. drawing.figures.line line = new drawing.figures.line(); Když použijeme jednoduché jméno, odkazujeme se na třídu nebo rozhraní z aktuálního balíčku. Např. Line line = new Line(); Balíček nesmí obsahovat jiné členy se stejným jménem, např.: Balíček drawing.figures nesmí obsahovat jinou třídu nebo rozhraní se jménem Line. Balíček nesmí obsahovat podbalíček Line. Balíček drawing nesmí obsahovat třídu nebo rozhraní s názvem figures. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/21
Pouze třídy a rozhraní deklarované jako public jsou přístupné z jiných balíčků. Např. třída drawing.figures.line: package drawing. f i g u r e s ; public class Line extends Figure... je přístupná ve všech balíčcích. Pokud chceme, aby byla třída přístupná pouze ve třídách a rozhraních balíčku package drawing.figures, deklarujeme: package drawing. f i g u r e s ; class Line extends Figure... c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/21
Hierarchie balíčků Jména balíčků korespondují s adresáři v adresářové struktuře. Např. třída drawing.figures.line je uložena v souboru: drawing/figures/line.java (Unix) resp. drawing\figures\line.java (MS Windows). Soubory obsahující třídy z nepojmenovaného balíčku jsou uloženy v aktuálním adresáři. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/21
Deklarace import 1/2 Pokud se odkazujeme na třídu nebo rozhraní z jiného balíčku, můžeme použít její normativní jméno. Např. drawing.figures.line line = new drawing.figures.line(); Můžeme ovšem použít deklaraci import, která nám umožňuje odkazovat se na třídy a rozhraní z tohoto balíčku pouze jednoduchým jménem. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/21
Deklarace import 2/2 Dva typy deklarace import: Jednoduchá - importujeme pouze jednu třídu nebo rozhraní. Např.: import drawing.figures.line; Složená deklarace (on demand) importujeme všechny veřejné třídy a rozhraní z balíčku. Např.: import drawing.figures.*; Zdrojový soubor může obsahovat několik deklarací import. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/21
příkazové řádky předávané programu při spouštění, např.: java c a t e s t. App 1 9 4 5 6 jsou přístupné přes pole řetězců předávané metodě 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 Michal Krátký Úvod do programovacích jazyků (Java) 10/21
1/3 Ke každému primitivnímu typu náleží třída (object wrapper). Třídy obsahují metody, které můžeme použít pro práci s hodnotami primitivních datových typů. Někdy je nutné pracovat s touto třídou namísto s primitivním datovým typem. Hodnoty v instancích těchto tříd jsou neměnné. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/21
2/3 Primitive type Size [bits] Wrapper class boolean - Boolean char 16 Character byte 8 Byte short 16 Short int 32 Integer long 64 Long float 32 Float double 64 Double void - Void c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/21
3/3 Společným předkem tříd Byte, Short, Integer, Long, Float a Double je třída Number. Některé statické metody: Převod hodnoty na řetězec. Např.: String s = Integer.toString(v); Převod řetězce na hodnotu. Např.: int v = Integer.parseInt(str); Některé statické konstanty: MIN_VALUE, MAX_VALUE reprezentují minimální a maximální hodnotu daného typu. Např.: int v = Integer.MIN_VALUE; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/21
, catest, App.java 1/3 package c a t e s t ; public class App I n t A r r a y mintarray ; public App ( ) mintarray = new I n t A r r a y ( 1 0 ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/21
, catest, App.java 2/3 public s t a t i c void main ( S t r i n g [ ] args ) new App ( ). Run ( args ) ; public void Run ( S t r i n g args [ ] ) i n t j = 0 ; for ( i n t i = 0 ; i < args. l e n g t h ; i + + ) i n t v = I n t e g e r. p a r s e I n t ( args [ i ] ) ; mintarray. setvalue ( j ++, v ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/21
, catest, App.java 3/3 mintarray. p r i n t ( ) ; i n t maxindex = mintarray. FindMax ( ) ; System. out. p r i n t l n ( " Maximalni prvek j e : " + mintarray. getvalue ( maxindex ) + ", na p o z i c i : " + maxindex ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/21
, catest, IntArray.java 1/4 package c a t e s t ; public class I n t A r r a y i n t marray [ ] ; public I n t A r r a y ( i n t c a p a c i t y ) marray = new i n t [ c a p a c i t y ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/21
, catest, IntArray.java 2/4 public void setvalue ( i n t index, i n t value ) marray [ index ] = value ; public i n t getvalue ( i n t index ) return marray [ index ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/21
, catest, IntArray.java 3/4 public void p r i n t ( ) for ( i n t i = 0 ; i < marray. l e n g t h ; i ++) System. out. p r i n t ( marray [ i ] + " " ) ; System. out. p r i n t ( " \ n " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/21
, catest, IntArray.java 4/4 public i n t FindMax ( ) i n t max = I n t e g e r. MIN_VALUE ; i n t index = 1; for ( i n t i = 0 ; i < marray. l e n g t h ; i + + ) i f ( max < marray [ i ] ) max = marray [ i ] ; index = i ; return index ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/21
, catest, kompilace, spouštění Kompilace: javac c a t e s t \ App. java Spouštění: java c a t e s t. App c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/21