5. Program v Javě5.1. Struktura programuZdrojový text programu se skládá z jedné nebo více tříd (viz 11.2.) a rozhraní (viz 11.6.), globální proměnné v Javě nejsou.Každá veřejná třída (viz 11.2.1.) musí být uložena v samostatném zdrojovém souboru (netýká se vnořených tříd - viz 11.8.), jehož název je shodný s názvem této třídy a obsahuje příponu .java. Obdobné pravidlo platí i pro veřejná rozhraní. Na začátku každého souboru může být ještě uvedena deklarace balíku (viz 12.2.) a/nebo import tříd (viz 12.1.). Formát zdrojového souboru obecně vypadá takto (1) : [ package jménoBalíku ; ]
[ import argument1; ]
[ import argument2; ]
.
.
.
[ import argumentN; ]
[ interface Rozhraní1 { /* tělo rozhraní 1 */ } ]
[ interface Rozhraní2 { /* tělo rozhraní 2 */ } ]
.
.
.
[ interface RozhraníN { /* tělo rozhraní N */ } ]
[ class Třída1 { /* tělo třídy 1 */ } ]
[ class Třída2 { /* tělo třídy 2 */ } ]
.
.
.
[ class TřídaN { /* tělo třídy N */ } ]
[ public class VeřejnáTřída { /* tělo veřejné třídy */ }
// nebo:
[ public interface VeřejnéRozhraní { /* tělo veřejného rozhraní */ } ]
5.2. PřekladVšechny zdrojové soubory .java musí být uloženy v jednom adresáři, odkud bude proveden překlad. Výjimku tvoří třídy a rozhraní umístěné v balících (viz kap. 12.), které jsou ve zvláštních adresářích. Cestu k balíkům udává systémová proměnná CLASSPATH (viz příloha D.).Překladač javac "vyrobí" z každého souboru .java jeden nebo několik souborů pojmenovaných podle jednotlivých tříd a rozhraní (v něm obsažených) s příponou .class. Každý přeložený soubor obsahuje jednu třídu nebo rozhraní v bytovém kódu.
5.3. Běh programuPo spuštění programu se nejprve se nahraje specifikovaná třída (2) do paměti a proběhne verifikace jejího bytového kódu (provede se například kontrola skoků a identifikačních hlaviček metod).U aplikace poté JVM spustí metodu main(), které předá pole argumentů z příkazové řádky. Běh appletu řídí prohlížeč, viz 17.1.. Třídy, které program používá, jsou nahrávány dynamicky podle potřeby, například až v okamžiku vytváření první instance (viz 11.1.1.); i u nich se provádí verifikace.
Za běhu programu každou používanou třídu reprezentují instance třídy java.lang.Class, která programátorovi umožňuje zjišťování informací o třídě daného objektu pomocí metod getSuperClass(), isInterface() a dalších. Od JDK 1.1 jsou dále možnosti introspekce rozšířeny díky třídám a rozhraním z balíku java.lang.reflect. Díky tomu, že třídy jsou uchovávány v samostatných souborech, mohou se chovat podobně jako dynamické knihovny (DLL), neboť každá veřejná třída definuje rozhraní metod, jež mohou být používány i z jiných programů. Tak lze bez snadno rozšiřovat existující aplikace, vytvářet rozhraní pro plug-iny apod. Dynamické nahrávání tříd zajišťují tzv. class loadery (třídy odvozené od java.lang.ClassLoader). Kromě základního class loaderu, který nahravá třídy z Java Core API (viz 12.3.) a cesty specifikované systémovou proměnnou CLASSPATH (viz D.1.), lze využívat i dalších. Například v internetovém prohlížeči příslušný class loader nahrává třídy appletu ze sítě pomocí HTTP protokolu.
| |||||||||||||||