Dione
Z. KotalaP. Toman: Java
Predchozi (Obsah) Dalsi

5. Program v Javě

5.1. Struktura programu

Zdrojový 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, 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:


   [ import argument1; ]
   [ import argument2; ]
      .
      .
      .
   [ import argumentN; ]


   [ package jménoBalíku ; ]


   [ 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í */ } ]

Priklad 5.1.
Program se skládá ze dvou veřejných (public) tříd A a B a neveřejné třídy X. Zdrojový text bude proto rozdělen do dvou souborů A.java a B.java. Neveřejnou třídu X je možné umístit do jednoho ze souborů (jako zde) a nebo do samostatného, libovolně pojmenovaného souboru (s příponou .java).

Soubor A.java obsahuje:

   import java.io.File;

   public class A {
      // tělo třídy A
   }

Soubor B.java obsahuje:

   class X {
      // tělo třídy X
   }

   public class B {
      // tělo třídy B
   }

5.2. Překlad

Vš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.

Priklad 5.2.
Po přeložení souborů z předchozího příkladu pomocí:

   javac A.java
   javac B.java

nebo: javac *.java

získáme tři soubory: A.class, B.class a X.class.

Pozn.: Překladač javac při překladu jednoho zdrojového souboru přeloží i všechny, na kterých je tento soubor závislý a ve které ještě nebyly přeloženy. Podrobnosti viz D.2..

5.3. Běh programu

Po spuštění programu se nejprve se nahraje specifikovaná třída (1) 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.

Program je ukončen, pokud:

  • je vykonána metoda exit() třídy Runtime (2) nebo

  • všechna zbývající vlákna jsou démoni (viz 16.6.) a navíc:

    • je ukončena metoda main() - u aplikace;

    • je zavolána metoda stop() - u appletu.

Pozn.: 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ě 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.


  • (1) Hlavní program je zapouzdřen ve veřejné třídě, jejíž jméno zároveň odpovídá jménu programu.
  • (2) Tato metoda se však obvykle v aplikacích pohodlněji volá přes System.exit().

Predchozi
Converted by Selathco v0.9 on 25.09.1999 19:46
Dalsi