Java je programovací jazyk, který byl už od počátku navržen jako přenositelný, objektově orientovaný, robustní, výkonný, interpretovaný a dynamický. V Javě lze jednoduše implementovat i paralelní výpočty s využitím vláken a monitorů. Vývoj Javy zahájil v roce 1991 James Gosling a původně byl jazyk určen pro set-top boxy.
Syntakticky je Java podobná jazyku C++, ale v mnoha rysech je mnohem jednodušší (má například automatickou správu paměti). Právě jednoduchost Javy možná stojí za její rostoucí oblibou ve školství. A co se člověk ve škole naučí, v praxi jako když najde.
Java je jazyk interpretovaný – to znamená, že jsou programy předloženy virtuálnímu stroji – JVM (Java Virtual Machine) – který se postará o jejich konkrétní provedení na dané platformě. Program v Javě lze tedy spustit na jakémkoliv zařízení, pro které existuje implementace virtuálního stroje. Pro nejrozšířenější platformy, jako je Windows, Linux, Solaris a MacOS, jsou tyto virtuální stroje samozřejmostí.
Zdrojový kód každé třídy se nachází v souboru s příponou .java. Tyto soubory se nejprve zkompilují do tzv. bytekódu (instrukce pro virtuální zásobníkově orientovaný procesor), který je zapsán do stejnojmenných souborů s příponou .class. Tyto soubory v bytekódu už lze spustit pomocí JVM. Obvykle se však zkompilované soubory spolu s dalšími „zabalí“ do balíčku s příponou .jar a až tento balík se distribuuje mezi konečné uživatele.
Každá aplikace vytvořená v Javě se skládá z jedné nebo více tříd, které jsou organizovány v balíčcích (příslušnost třídy k danému balíčku se definuje příkazem package NÁZEV na začátku zdrojového kódu třídy).
Program v Javě tedy obsahuje:
Aby byl program samostatně spustitelný, musí alespoň jedna z veřejně viditelných tříd (tzv. hlavní třída) obsahovat metodu main() s následující hlavičkou:
kód v jazyce Java - Zobrazit
Tuto speciální metodu zavolá virtuální stroj (JVM) v okamžiku spuštění vaší aplikace.
Každá třída by se měla nacházet ve stejnojmenném souboru. Třída Pes by se tedy měla nacházet v souboru Pes.java. Kromě názvu třídy existuje ještě tzv. kvalifikovaný název, který kromě názvu třídy obsahuje i její přesné umístění v balíčcích (jednotlivé vnořené balíčky se oddělují tečkou).
Příklady kvalifikovaných názvů:
Chceme-li ve zdrojovém kódu použít třídu, která se nachází v jiném balíčku, musíme to kompilátoru sdělit pomocí příkazu import KVALIFIKOVANÝ NÁZEV.
I když je jazyk Java objektově orientovaný, přesto z výkonnostních důvodů obsahuje primitivní datové typy, které nejsou samy o sobě objekty. Existují k nim však tzv. obalové třídy, které jsou s nimi za určitých podmínek zaměnitelné a nabízí užitečné metody pro práci s nimi.
| Datový typ | Typ | Velikost | Kódování |
|---|---|---|---|
| byte | celočíselný | 8 bitů | dvojkový doplněk, se znaménkem |
| short | celočíselný | 16 bitů | dvojkový doplněk, se znaménkem |
| int | celočíselný | 32 bitů | dvojkový doplněk, se znaménkem |
| long | celočíselný | 64 bitů | dvojkový doplněk, se znaménkem |
| float | reálný | 32 bitů | IEEE 754 |
| double | reálný | 64 bitů | IEEE 754 |
| boolean | logický | N/A, počítá se jako 1 bit | N/A |
| char | znakový | 16 bitů | N/A |
Jazyk Java je založen na objektech a vše (kromě primitivních datových typů) je objekt. Všechny třídy, které nemají uvedeného předka, jsou potomky univerzální třídy Object a dědí od ní několik užitečných metod, například pro převod na řetězec (toString()), zjištění identity (equals(), hashcode()) a metody pro synchronizaci vláken (wait(), notify(), notifyAll()). Existuje i speciální hodnota null, která je také „potomkem“ třídy Object a znamená „nic“ nebo „nedefinováno“.
Pro práci s primitivními datovými lze pro každý primitivní datový použít tzv. obalovou třídu. I tyto obalové třídy jsou potomky třídy Object. Java nabízí tyto obalové třídy: Byte, Short, Integer, Long, Float, Double, Boolean, Character.
Základem programování v Javě je vytváření vlastních tříd. Každá třída obsahuje atributy (třídní proměnné) a metody (třídní funkce).
Dále mají třídy tzv. konstruktor, což je speciální metoda se stejným názvem jako třída (bez návratového typu), kterou virtuální stroj (JVM) zavolá při vytváření nové instance dané třídy. Konstruktor má za úkol především incializovat počáteční stav objektu, např. inicializovat proměnné.
Pro přístup k proměnným a metodám dané instance třídy se používá speciální klíčové slovo this. Tento konstrukt v sobě nese referenci na aktuální instanci třídy (tedy tu, se kterou procesor právě pracuje).
Následuje jednoduchý příklad vlastní třídy.
kód v jazyce Java - Zobrazit
Další příklad ukazuje použití pole a generování náhodných čísel.
kód v jazyce Java - Zobrazit
Přístup k proměnným, metodám je možné omezit pomocí tzv. modifikátorů. Jsou to klíčová slova jazyka Java, která umožňují „skrýt“ proměnnou před vnějším světem či ostatními třídami. Není-li proměnná či metoda dostupná, nelze k ní přístupovat (číst, zapisovat, volat). Seznam všech modifikátorů a jejich efekt na viditelnost proměnných a metod uvádí následující tabulka:
| Modifikátor | Třída | Balíček | Potomek | Okolní svět |
|---|---|---|---|---|
| public | Ano | Ano | Ano | Ano |
| protected | Ano | Ano | Ano | Ne |
| (bez modifikátoru) | Ano | Ano | Ne | Ne |
| private | Ano | Ne | Ne | Ne |
Java přichází v několika edicích, které se liší knihovnou tříd a podporou některých funkcí.