Obsah

Úvod

Viz též hesla Java a James Gosling na Wikipedii.

Počátky programovacího jazyka Java spadají do první poloviny devadesátých let minulého století. Tehdy byl v laboratořích firmy SUN vyvíjen jazyk pro malé domácí spotřebiče, pracovně nazvaný Oak. Jeho tvůrci vycházeli z jazyka C++. V roce 1995 byl Oak přejmenován a byla představena první verze jazyka Java. Od té doby prošla Java velkými změnami a další změny nás ještě čekají. Tento text popisuje verzi 7, která vyšla v červenci 2011. Produkční verze má označení 7.0 a vývojářská 1.7.0.

Pojem Java se používá ve dvou významech: programovací jazyk a platforma. Programovací jazyk definuje pravidla pro zápis programů. Nedílnou součástí programovacího jazyka Java je tzv. aplikační programové rozhraní (anglicky Application Programming Interface, API). Zjednodušeně řečeno je to kód, který máme k dispozici při psaní programů. Javovské API se skládá z tříd. Třídy jsou uspořádány do balíků. Platforma znamená prostředí, ve kterém můžeme programy spouštět.

Viz též heslo Překladač na Wikipedii.

kompilátor Tvorba programů pro javovskou platformu probíhá ve dvou krocích. V prvním kroku napíšeme tzv. zdrojový text (někdy též zdrojový kód). Zdrojový text je zápisem programu. Ve druhém kroku je zdrojový text přeložen do tzv. bajtkódu. Překlad zdrojového textu do bajtkódu zajistí překladač (kompilátor, angl. compiler).

Více o JVM v kapitole Javovský virtuální stroj.

Bajtkód (angl. bytecode) jsou instrukce pro tzv. javovský virtuální stroj (angl. Java Virtual Machine, JVM). JVM Každá instrukce se skládá z operačního kódu a žádného nebo několika operandů. JVM umožňuje bajtkód spustit. Funguje jako tzv. interpret (angl. interpreter), tj. čte instrukce a hned je provádí. Moderní JVM často obsahují tzv. kompilátor Just-In-Time (angl. Just-In-Time compiler, JIT compiler), který překládá instrukce JVM do nativního kódu procesoru. Nativní kód je tvořen instrukcemi, které jsou specifické pro daný typ procesoru. Např. procesory Intel a SPARC mají různou sadu instrukcí. Protože program v nativním kódu běží rychleji než v bajtkódu, lze pomocí překladu do nativního kódu program podstatně zrychlit. Do celkové doby běhu programu je ovšem třeba započítat i dobu potřebnou pro překlad bajtkódu do nativního kódu. Tato doba nebývá zanedbatelná, proto se obvykle překládají jen ty části, které se provádějí opakovaně.

Zdrojový text můžeme zapsat v libovolném textovém editoru. Vhodný je např. JEdit (www.jedit.org), který umí zvýrazňovat syntaxi. Zdrojový text uložíme do souboru s příponou java, např. Prvni.java. Tento soubor předložíme kompilátoru. Kompilátor jej přeloží a výsledný bajtkód zapíše do jednoho či několika souborů s příponou class, např. Prvni.class. Pro překlad lze použít překladač javac, který je součástí Java SE Development Kit (JDK) firmy Oracle. JDK kromě překladače obsahuje také JVM (program java) a několik dalších užitečných programů, např. javadoc pro vytváření dokumentace.

syntaxe a semantika Popis programovací jazyka rozdělujeme na dvě části: syntaxi a sémantiku. Syntaxe (angl. syntax) definuje pravidla pro správný zápis. Např. říká, kde je nutné psát závorky. Je-li program syntakticky správně, lze jej přeložit a spustit. Sémantika (angl. semantics) definuje význam jednotlivých jazykových konstrukcí. Např. říká, že operátor = provede přiřazení. Aby program dělal to, co po něm chceme, musí být sémanticky správně. V této učebnici se budeme zabývat syntaxí i sémantikou. Probereme postupně většinu syntaktických konstrukcí jazyka Java a u každé si řekneme její sémantiku. Při zápisu programu používáme tzv. klíčová slova (angl. keywords). Jsou to slova, která mají v jazyce speciální význam (dvě z nich, const a goto, zůstávají ovšem nepoužitá). Java rozlišuje malá a velká písmena. Např. Class je něco jiného než class. Klíčová slova jsou pouze z malých písmen.

Program v Javě se skládá z jedné nebo více tříd. Třídu deklarujeme pomocí klíčového slova class. Třída může obsahovat metody. Každá třída i metoda má jméno (s výjimkou anonymních tříd, o kterých zde ovšem nebude řeč). Obsah třídy i metody je uzavřen ve složených závorkách ({ a }). Do metod zapisujeme příkazy. Každý program musí obsahovat metodu main, která má vždy stejnou hlavičku:

  public static void main( String[] args ) 
Význam jednotlivých slov v této deklaraci probereme později. Pro začátek budeme zapisovat příkazy pouze do metody main. Tato metoda slouží jako vstupní bod do aplikace. Spuštění programu probíhá tak, že JVM zavolá tuto metodu. Příkazy v ní se provádějí jeden po druhém v pořadí, v němž jsou zapsány.

klíčová slova

K výstupu na obrazovku slouží metoda System.out.println(). Program, který vytiskne jednoduchý pozdrav, vypadá takto:

  public class Prvni {
     public static void main( String[] args ) {
        System.out.println( "ahoj" );
     }
  } 
Tento zdrojový text deklaruje třídu Prvni, která obsahuje metodu main. Před spuštěním je potřeba uložit tento zdrojový text do souboru Prvni.java a přeložit jej kompilátorem javac. Protože je ve zdrojovém textu před slovem class uvedeno public, musí se jméno souboru skládat ze jména třídy a přípony .java. Parametrem programu javac je jméno souboru.
  javac Prvni.java 
Překladač vytvoří soubor Prvni.class, který obsahuje instrukce pro JVM. Můžeme jej spustit pomocí programu java. Parametrem programu java je jméno třídy.
  java Prvni 
Program java načte třídu do paměti (ze souboru Prvni.class) a zavolá metodu main. Soubor Prvni.class se hledá v adresářích, které jsou v proměnné prostředí CLASSPATH. Pokud tato proměnná není nastavena, prohledá se aktuální adresář. Je-li třída v balíku, tj. začíná-li zdrojový text příkazem package, je celé jméno třídy tvořeno jménem balíku a jménem třídy (odděleny jsou tečkou). V takovém případě musí být přeložený soubor v adresáři, který se jmenuje stejně jako balík.
  package prvni;

  public class Druha {
     public static void main( String[] args ) {
        System.out.println( "Java" );
     }
  } 
Při spouštění zadáváme celé jméno třídy:
  java prvni.Druha 
Program java bude hledat soubor Druha.class v podadresáři prvni. Pokud nemáme nastavenu proměnnou CLASSPATH, musí aktuální adresář obsahovat podadresář prvni se souborem Druha.class.

Násobení zapisujeme v Javě pomocí znaku *. Stejný způsob zápisu budeme používat i v tomto textu. Tedy např. 4*5 a 2*x jsou zápisy násobení.

Úloha 1

Napište ve správném pořadí.

Úloha 2

Doplňte věty.

Úloha 3

Doplňte příkazy.

Úloha 4

Doplňte do křížovky klíčová slova.

Otázky a odpovědi

Viz též hesla Algoritmus a Euklidův algoritmus na Wikipedii.

Euklidův algoritmus

Student: Co je to vlastně program?
Java guru: Program je posloupnost deklarací. Když program spustíš, začnou se provádět příkazy tohoto programu. V Javě se začnou provádět příkazy v metodě main().
Student: Už jsem se setkal s pojmem algoritmus. Je nějaký rozdíl mezi programem a algoritmem?
Java guru: Algoritmus je návod, jak řešit nějakou úlohu. Např. Euklidův algoritmus pro nalezení největšího společného dělitele dvou čísel lze slovně popsat takto:
  1. počáteční hodnoty si označíme x a y,
  2. dokud jsou x a y různá, provádíme toto: menší z čísel ponecháme a větší nahradíme rozdílem obou čísel,
  3. x i y obsahují stejnou hodnotu; tato hodnota je největším společným dělitelem původních čísel.
Takto zapsaný algoritmus je nezávislý na programovacím jazyce. Zapíšeme-li algoritmus v některém programovacím jazyce, získáme program, který lze nechat provést na počítači.