Úvod do programovacích jazyků (Java)

Podobné dokumenty
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Úvod do programovacích jazyků (Java)

Soubor jako posloupnost bytů

Z. Kotala, P. Toman: Java ( Obsah )

8. přednáška: Soubory a proudy

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Práce se soubory v Javě

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

6. PRÁCE S DATOVÝMI PROUDY

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Textové soubory. alg9 1

1. Téma 12 - Textové soubory a výjimky

InputStream. FilterInputStream

8 Třídy, objekty, metody, předávání argumentů metod

Úvod do programovacích jazyků (Java)

Java - výjimky. private void vstup() throws IOException {... }

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Programování v Javě I. Únor 2009

Seminář Java II p.1/43

Programování v Javě I. Leden 2008

KTE / ZPE Informační technologie

Ošetřování chyb v programech

Teoretické minimum z PJV

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Java Výjimky Java, zimní semestr

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Výjimky. v C# a Javě

29. Výjimky, jejich vznik, vyhození, odchyt a zpracování. (A7B36PVJ)

Výjimky. Tomáš Pitner, upravil Marek Šabo

10 Balíčky, grafické znázornění tříd, základy zapozdření

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Připravil: David Procházka. Programovací jazyk C++

1. Programování proti rozhraní

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Java a XML. 10/26/09 1/7 Java a XML

Algoritmizace a programování. Terminálový vstup a výstup

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

7. Datové typy v Javě

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např.

Úvod do programování - Java. Cvičení č.4

Vytváření a použití knihoven tříd

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Více o konstruktorech a destruktorech

Zápis programu v jazyce C#

17. Projekt Trojúhelníky

Regulární výrazy. Vzory

Výjimky. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Základy objektové orientace I. Únor 2010

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

RMI Remote Method Invocation

Abstraktní datové typy: zásobník

Paměť počítače. alg2 1

6. Příkazy a řídící struktury v Javě

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Algoritmizace a programování

PREPROCESOR POKRAČOVÁNÍ

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Konstruktory a destruktory

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

3. Třídy. Základní pojmy objektového programování. Třídy

Programovací jazyk Java

PROGRAMOVÁNÍ V C++ CVIČENÍ

RMI - Distribuované objekty v Javě

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Zpracování výjimečných situací

ADT/ADS = abstraktní datové typy / struktury

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Jazyk C++ II. Šablony a implementace

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

7. Statické prvky třídy

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Dědičnost (inheritance)

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Technologie JavaBeans

Generické programování

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Java Řetězce Java, zimní semestr

Principy objektově orientovaného programování

Výjimky a soubory. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Soubory. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 12 A0B36PR1 Programování 1

Transkript:

Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 1/39

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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 2/39

Balíčky 2/2 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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 3/39

Normativní jména tříd a rozhraní 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. 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(); c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 4/39

Veřejné třídy a rozhraní 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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 5/39

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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 6/39

Deklarace import 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. 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.*; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 7/39

Java API API Application Programming Interface. Množina tříd, kterou má programátor k dispozici, součásti: java.io.* vstup/výstup.... Ke každé třídě nalezneme v dokumentaci definované atributy a metody. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 8/39

(Exceptions) Pro ošetření chyb poskytuje Java mechanismus zvaný výjimky (Exceptions): Když nastane v programu chyba, program vygeneruje událost výjimku. Běh programu je přerušen a runtime hledá kód ošetřující pří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 jazyků (Java) 9/39

, příklad public s t a t i c void main ( S t r i n g [ ] args ) { t r y { 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 jazyků (Java) 10/39

Když nastane výjimka: Je vytvořen objekt výjimky, který obsahuje informace o výjimce (typ, stav programu,... ). Běh programu je přerušen. Runtime hledá kód ošetřující chybu. Kód zachycující výjimku se nazývá exception handler (catch). Výběr handleru závisí na typu objektu výjimky. Zachytávání výjimek se skládá ze tří bloků: try, catch a finally c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 11/39

Syntaxe: t r y {... catch (... ) {... catch (... ) {... f i n a l l y {... Za try blokem musí následovat nejméně jeden blok catch nebo finally. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 12/39

, blok try Syntaxe: t r y {... / / p r i k a z y Blok try definuje platnost handleru. Pokud výjimka nastane v bloku try, výjimka je ošetřena příslušným handlerem asociovaným s tímto blokem. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 13/39

, blok catch Syntaxe: catch ( SomeThrowableObject variablename ) {... / / p r i k a z y Za try může nasledovat několik bloků catch, ale nejvýše jeden blok finally. Proměnná variablename je jméno výjimky na které se můžeme v kódu odkazovat. Platnost této proměnné je v bloku try. Proměnná může být použita jako jiné lokální proměnné, např. variablename.getmessage(); Konvence: Často tuto proměnnou pojmenováváme e. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 14/39

, blok finally Blok finally poskytuje mechanismus umožňující vykonání kódu bez ohledu na to zda v bloku try nastala nebo nenastala výjimka. Příkazy v bloku finally jsou vykonány pokud: Blok try je standardně ukončen. V bloku try nastane výjimka, která je ošetřena jedním z handlerů. V bloku try nastane výjimka, která není ošetřena žádným handlerem. t r y {... / / o t e v r i soubor a zapis do nej f i n a l l y { i f ( f i l e! = null ) f i l e. close ( ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 15/39

, metody Metody nemusí ošetřovat všechny výjimky, mohou vyvolat výjimku k volané metodě. Pokud výjimka typu T může být vyvolána v metodě a metoda neošetřuje výjimku typu T, pak musíme specifikovat, že metoda může vyvolat výjimku typu T. K tomuto účelu použijeme klíčové slovo throw v hlavičce metody: public void r e a d F i l e ( S t r i n g filename ) throws IOException {... throw new IOException ( ) ; / / v y t v o r e n i vyjimky c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 16/39

, hierarchie výjimek Pomocí dědičnosti můžeme vytvářet vlastní výjimky(předek Throwable), výhody: Seskupování chybových typů. Zjemňování chybových stavů. public class StackException extends Exception { public StackException ( S t r i n g message ) { super ( message ) ; public class EmptyStackException extends StackException { public EmptyStackException ( ) { super ( " Zasobnik j e prazdny. " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 17/39

Program často potřebuje číst nebo zapsat data z/do externích zdrojů. Data může obsahovat soubor na disku, soubor na síti, blok paměti atd. Proudy reprezentují abstrakci umožňující sekvenční čtení a zápis dat. Při použití proudů můžeme přistupovat k datům bez ohledu na to z jakého zdroje je čteme popř. zapisujeme. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 18/39

Proudy Rozlišujeme dva typy proudů: vstupní proudy pro čtení dat, výstupní proudy pro zápis dat. Pro čtení a zápis dat používáme podobná schémata: Otevření proudu. Dokud jsou v proudu data, čti. / Dokud jsou data, zapisuj. Uzavření proudu. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 19/39

Proudy Balík java.io obsahuje kolekci tříd pro práci s proudy. Třídy rozdělujeme do dvou hierarchií: Binární proudy pracují s proudy binárních dat. Podtřídy tříd: InputStream - vstupní proud, OutputStream - výstupní proud. Znakové proudy pracují s proudy znaků. Podtřídy tříd: Reader - vstupní proud, Writer - výstupní proud. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 20/39

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 len ) 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 len ) 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 len ) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 21/39

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 len ) Další metody: Všechny třídy obsahují metodu close(). Tato metoda je bud volána explicitně nebo implicitně při rušení objektu garbage collectorem. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 22/39

Proudy, metody Třídu InputStream a Reader obsahují metody: long skip ( long n ) / / preskoceni n bytu boolean marksupported ( ) / / oznaceni a k t u a l n i h o bytu void mark ( i n t readaheadlimit ) void r e s e t ( ) Třídy OutputStream a Writer obsahují metodu: void f l u s h ( ) / / vyprazdneni buferu Většina metod pracující s proudy vyhazuje výjimku java.io.ioexception nebo některou z jejich podtříd. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 23/39

Souborové proudy 1/3 Souborové proudy čtou nebo zapisují do souborů na souborovém systému. FileInputStream FileOutputStream FileReader FileWriter c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 24/39

Souborové proudy 2/3 Příklad: Reader i n = new FileReader ( " i n p u t. t x t " ) ; W r 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. close ( ) ; out. close ( ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 25/39

Souborové proudy 3/3 Čtení data byt po bytu není příliš efektivní. Snažíme se tedy číst data po větších blocích. InputStream i n = new FileInputStream ( " i n p u t. t x t " ) ; OutputStream o u t = new FileOutputStream ( " output. t x t " ) ; f i n a l i n t BUFFER_LENGTH = 8 1 9 2 ; 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. close ( ) ; out. close ( ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 26/39

Třída File 1/2 Instance třídy java.io.file reprezentuje soubor na souborovém systému. Pokud vytvoříme instanci třídy File pro nějaký soubor, můžeme zjišt ovat následující informace: Plné jméno souboru. Jméno rodičovského adresáře. Zda se jedná o soubor nebo adresář. Zda je zadán absolutně nebo relativně. Zda existuje. Velikost souboru. Přístupová práva (čtení, zápis). Čas modifikace, zda je skrytý apod. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 27/39

Třída File 2/2 Instanci třídy java.io.file můžeme použít pro: Vytváření souboru. Rušení souboru. Přejmenování souboru. Vylistování adresáře. Vytvoření podadresáře. Nastavení času modifikace. Vytvoření pomocných souborů (temporary files). S t r i n g filename = " t e s t. t x t " ; F i l e f = new F i l e ( filename ) ; boolean ok = f. d e l e t e ( ) ; System. out. p r i n t l n ( ok? "O. K. " : " Not deleted " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 28/39

Standardní vstup a výstup Ve třídě System jsou definovány tyto třídní konstantní proměnné: in - standardní vstup (InputStream), implicitně klávesnice. out - standardní výstup (PrintStream), implicitně obrazovka. err - standardní chybový výstup (PrintStream). Všechny tyto proudy jsou implicitně otevřené a nemohou být uzavřeny. Všechny tyto proudy je možné přesměrovat. $ java ClassName < i n p u t. t x t > output. t x t $ java ClassName < i n p u t. t x t less Ukončení vstupu: ^Z (Windows), ^D (Linux). c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 29/39

Další třídy Čtení a zápis primitivních datových typů DataInputStream, DataOutputStream. Náhodný přístup k datům RandomAccessFile. (PrintStream). BufferedInputStream, BufferedOutputStream. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 30/39

Příklad, DoubleArray.java 1/4 package streamtest ; public class DoubleArray { double marray [ ] ; public DoubleArray ( i n t c a p a c i t y ) { marray = new double [ c a p a c i t y ] ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 31/39

Pří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 jazyků (Java) 32/39

Příklad, DoubleArray.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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 33/39

Příklad, DoubleArray.java 4/4 public void s o r t ( ) { for ( i n t i = 0 ; i < marray. l e n g t h ; i ++) { for ( i n t j = 0 ; j < marray. length 1 ; { 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 jazyků (Java) 34/39

Příklad, StreamApp.java 1/4 package streamtest ; public class StreamApp { DoubleArray mdoublearray ; public StreamApp ( ) { mdoublearray = new DoubleArray ( 1 0 ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 35/39

Pří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 jazyků (Java) 36/39

Příklad, StreamApp.java 3/4 private void read ( ) { f i n a l i n t length = 1 0 2 4 ; i n t array [ ] = new i n t [ l e n gth ] ; i n t i = 0 ; t r y { while ( ( array [ i + + ] = System. i n. read ( ) )! = 1 ) { catch ( Exception e ) { c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 37/39

Pří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 ( array [ j ] = = j = = i 1 ) { double v = Double. parsedouble ( s t r ) ; mdoublearray. setvalue ( countofnumber ++, v ) ; s t r = " " ; else { s t r + = ( char ) array [ j ] ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 38/39

Parametry předávané programu při spouštění, např.: java c a t e s t. App 1 9 4 5 6 Parametry 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 2008 Michal Krátký Úvod do programovacích jazyků (Java) 39/39