Java - Třídy (26.díl)

Napsal O webu (») 28. 3. 2008 v kategorii Programování, přečteno: 3242×
obrazky/java_logo.png

Operace s třídami

Využijme dosavadních znalostí o pracích s metodami (doposud jsme se seznámili pouze s metodami třídy) a pokusíme se je dále rozšířit. Na rozdíl od metody třídy je nutno pro metody instance vytvořit nějaký objekt.

Vytvoření objektu

Pro vytvoření objektu (resp. instance) je nutno provést dva kroky. Nejprve deklarujeme referenční proměnnou. V tomto případě krok představuje vytvoření odkazu datového typu Souradnice
Souradnice sour;
Se samotným odkazem není možno pracovat, došlo by k výjimce. V dalším kroku proto vytvoříme v paměti nový objekt a inicializujeme jím vytvořenou referenční proměnnou.
sour=new Souradnice();
Oba řádky bychom mohli spojit do jednoho.
Souradnice sour=new Souradnice();
Odkaz sour od tohoto okamžiku ukazuje na vytvořený objekt. Takto vytvořený objekt má dvě proměnné instance: delka, uhel a dvě metody instance: x, y. Tuto vlastnost lze zobecnit, říkáme že každý vytvořený objekt má k dispozici vlastní sadu komponent. Jakým způsobem lze s komponentami pracovat?

Přístup k datovým položkám. K datovým položkám lze přistupovat prostřednictvím tzv. tečkové notace. Obecně ji lze zapsat ve tvaru
objekt.polozka
Všimněme si, že v Javě neexistuje jako v C++ operátor nepřímého přístupu ->. Přístup prostřednictvím tečkové notace je tedy jediný možný. V našem případě bychom k datovým položkám mohli přistupovat takto:
sour.delka;
sour.uhel;

S využitím této konstrukce je možno datové položky i inicializovat.
sour.delka=10;
sour.uhel=20;

Tímto způsobem jsme vlastně provedli explicitní inicializaci. Implicitní inicializace byla provedena při vytvoření objektu. Jelikož se jednalo o datové položky, byly inicializovány na hodnotu 0.

Vzhledem k tomu, že datové položky byly deklarovány jako soukromé, může k ním tímto způsobem přistupovat pouze z vnitřku třídy. Výše uvedený kód zapišme do metody main(), která bude vypadat takto
public static void main (String [] args)
{
Souradnice sour=new Souradnice();
sour.delka=10;
sour.uhel=20;
}

Obecně však můžeme kód zapsat do jakékoliv jiné metody, nemusí to být zrovna main().

Práce s metodami instance S metodami instance se pracuje podobným způsobem jako s datovými položkami, opět využíváme tečkovou notaci. Syntaxe vypadá takto
objekt.metoda
Metody deklarované ve třídě Souradnice jsou bezparametrické. Chceme –li určit hodnotu pravoúhlých souřadnic pro aktuální hodnoty polárních souřadnic, vytvořme nejprve dvě lokální proměnné typu double
double xpr;
double ypr;

do kterých následně uložíme spočtené hodnoty obou souřadnic.
xpr=sour.x();
ypr=sour.y();

Kód opět zapíšeme do metody main(), i když ani zde to není podmínkou. Výsledné hodnoty můžeme vytisknout.
public static void main (String [] args)
{
Souradnice sour=new Souradnice();//vytvoreni instance
sour.delka=10; //icializace jejich datovych polozek
sour.uhel=20;
double xpr; //vytvoreni lokalnich promennych
double ypr;
xpr=sour.x();//vypocet hodnot pravouhlych souradnic
ypr=sour.y();
System.out.println(X=+xpr+ Y=+ypr);
}

Rušení objektů. Připomeňme, že v jazyce Java není nutno objekty rušit manuálně. O objekty, na které již neexistuje platný odkaz, se postará garbage collector, který je smaže. Odkaz na objekt může zaniknout dvěma způsoby:

  • Zánikem platnosti odkazu. Odkaz se chová stejně jako jakákoliv jiná proměnná.

    Po ukončení bloku, ve kterém byl deklarován, zaniká.

    public static void main (String [] args)
    {
    {
    Souradnice sour=new Souradnice();
    } //zanika odkaz na objekt sour
    }


  • Přiřazením hodnoty null. Hodnota null představuje speciální hodnotu, jejíž přiřazením docílíme stavu, kdy odkaz nikam neukazuje. Tímto způsobem ho vynulujeme a dosáhneme stejného výsledku jako v předchozím
    případě.

    public static void main (String [] args)
    {
    Souradnice sour=new Souradnice();
    sour=null; //zanika odkaz na objekt sour
    }


    Druhá varianta se používá často v případech, kdy pracujeme s rozsáhlými daty a potřebujeme rychle uvolnit systémové prostředky. Garbage collector provede následně smazání takového objektu. Neprovede ho okamžitě, ale až v případě, kdy to sám uzná za vhodné. Zopakujme, že garbage collector je možné spustit
    na vyžádání a s vysokou prioritou konstrukcí System.gc().

    Autor: Filip Koval
  • Štítky: Java
    Facebook Twitter Topčlánky.cz Linkuj.cz

    Komentáře

    Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
    Článek ještě nebyl okomentován.


    Nový komentář

    Téma:
    Jméno:
    Notif. e-mail *:
    Komentář:
      [b] [obr]
    Odpovězte prosím číslicemi: Součet čísel třináct a deset