V tomto díle si povíme o tom, co jsou statické proměnné a statické metody, a dále o balíčcích, zajišťujících hierarchii tříd Javy.

Statické proměnné

Dosud jsme hovořili o nestatických proměnných (proměnné instance). Statické proměnné (proměnné třídy) na rozdíl od nich existují pouze jedenkrát pro celou třídu, a to i v případě, že neexistují žádné její instance. Nepopisují vlastnost objektů třídy, ale třídy jako takové. Příkladem pro třídu Osoba může být počet osob uchovávaných v programu nebo jejich seznam:

public class Osoba {
  public static int pocetOsob;
  public static java.util.Vector seznamOsob;
  …
}

Pomocí statických proměnných se často obchází nepřítomnost globálních proměnných a konstant v Javě. Pokud statické proměnné přidáte modifikátor final, jedná se o konstantu.

Statické metody

Statické metody (metody třídy) mohou přistupovat pouze ke statickým proměnným a lze je volat i v případě, že neexistuje žádný objekt dané třídy:

public class Osoba {
  public static java.util.Vector seznamOsob = new java.util.Vector();
  public static final int MAX_POCET = 100;
  public static int volnychOsob () {
    return MAX_POCET – seznamOsob.size();
    }
  public static Osoba novaOsoba() {
    if (volnychOsob()<=0) return null;
    Osoba nova = new Osoba();
    seznamOsob.add(nova);
    return nova;
    }
  …
}

Popis příkladu: Statická proměnná seznamOsob je typu Vector, což je struktura pro uchovávání libovolného počtu objektů. Metoda volnychOsob vrací počet volných míst pro osoby (maximální počet osob je omezen konstantou MAX_POČET a aktuální počet se zjišťuje metodou size objektu seznamOsob). Metoda novaOsoba založí nový objekt třídy Osoba a přidá ho do seznamu osob.

Kupříkladu matematické funkce jsou v Javě jako statické metody třídy java.lang.Math, matematické konstanty jsou jakoby statické proměnné této třídy:

double x, y;
x = 1;
y = java.lang.Math.sin(x);
double o, r;
r = 5.12e+5;
o = 2 * java.lang.Math.PI * r;
int a=2, b=-2;
int m;
m = java.lang.Math.min(a,b);

Balíčky

Balíčky se používají pro seskupování souvisejících objektů a souvisí s oblastí jmen, o čemž si povíme později. Jméno třídy odpovídá jménu souboru, ve kterém je definována třída. Jméno balíčku odpovídá adresáři, kde je daná třída umístěna. Bude–li například naše třída Kruznice umístěna v balíčku grafika.tvary, bude umístěna v souboru grafika\tvary\kruznice.class (zdrojový kód v grafika\tvary\kruznice.java). Pokud chcete tuto třídu v jiné třídě využívat, musí být v systémové proměnné CLASSPATH definována cesta k adresáři balíčku (adresář obsahující podadresář grafika), a na třídu se odkazujete pomocí tečkové notace, jak ukazuje příklad:

grafika.tvary.Kruznice k1 = new grafika.tvary.Kruznice();

Balíček třídy se definuje klíčovým slovem package umístěným jako první příkaz souboru. Příklad:

package grafika.tvary;
public class Osoba {

}

Pokud příkaz package neuvedete, je třída součástí nepojmenovaného standardního balíčku. To se hodí pro malé aplikace nebo pro testovací účely, jinak raději balíčky používejte.

Standardní třídy jazyka Java jsou umístěny v podbalíčcích balíčku java: java.lang, java.util, java.awt. V příkladu výše jsme se na objekt Vector z balíčku java.util udvolávali jako na java.util.Vector.

Příklad z prvního dílu:

Nyní již umíme přečíst následující volání (podobné příkladu z prvního dílu seriálu):

java.lang.System.out.println(”Zdravime vlka!”);

Balíček java.lang obsahuje třídu System, ta má statickou proměnnou out (reference na objekt typu java.io.PrintStream) a ta má metodu println. Proměnná out třídy System představuje standardní výstup programu a metoda println vypíše řádek, celkově toto volání vypíše zadaný řetězec na standardní výstup. Jelikož balíček java.lang je základní balíček Javy, lze jeho jméno vynechávat a používat tak zkrácený zápis (který byl popsán v prvním díle seriálu):

System.out.println(”Zdravime vlka!”);

Na okraj uvádím, že Java rovněž umožňuje odkazovat se absolutně na třídy umístěné kdekoli na Internetu. K tomu se používá klasické doménové jméno. Předpokládejte, že chcete využívat třídu Circle umístěnou na serveru java.libraries.com v adresáři jirka/grafika (http://java.libraries.com/jirka/grafika/Circle.class). Kompletní jméno takové třídy by pak bylo COM.libraries.java.jirka.grafika.Circle.

Import balíčků

Abyste nemuseli pokaždé vypisovat kompletní dlouhá jména všech tříd a jejich balíčků, umožňuje Java pomocí příkazu import určit, které třídy (balíčky) budete používat, a poté psát pouze zkrácený zápis. Pokud například často využíváte třídu grafika.tvary.Kruznice, stačí napsat za příkaz package před definici třídy import grafika.tvary.Kruznice;, a potom se na třídu lze odkazovat jako na Kruznice. Pokud používáte hodně tříd z balíčku java.awt (java.awt.Button, java.awt.List, java.awt.Checkbox, …), můžete uvést příkaz import java.awt.*; a na třídy se odkazovat jen jako na Button, List, Checkbox

Příklad třídy:

package grafika.tvary;
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
public class MojeTrida {
  // definice třídy
  …
  …
  }

Žádný příspěvek v diskuzi

Odpovědět