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.
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).
Bajtkód
(angl. bytecode) jsou instrukce pro
tzv. javovský virtuální stroj
(angl. Java Virtual Machine, 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.
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.
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í.
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:
počáteční hodnoty si označíme
x a
y,
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,
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.