Datové typy v Javě - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Java

Datové typy v Javě

java

25. července 2002, 00.00 | Chcete se naučit programovat v Javě? Sledujte tento seriál. První ucelenou a důležitou oblastí jsou datové typy a právě ty máme dnes na programu.

{Datové typy - úvod} Přiřazení hodnoty

Hodnota může být nejdříve přiřazena proměnné již při její deklaraci. Mimo to dále pak může být přiřazena kdekoliv v kódu (kde je platná).

Je zde jedna výjimka, u deklarace s klíčovým slovem final není již možné změnit její hodnotu — jedná se totiž o konstantu.

Jistě nemusím připomínat, že u deklarací více proměnných stejného typu lze celý zápis zkrátit na jednu řádku:

     int i;
     int c;
// resp.
     int i, c;

Je také možno použít přiřazování hodnoty více proměnných najednou.

     int i, c;
     i = c = 0; // obě jsou rovny nule

Paradoxně lze i přiřadit proměnné jiný typ, ten se ovšem před přiřazením přetypuje více si řekneme v části o přetypování.

     int i, c;
     double x, y;
     x = y = i = c = 0; // všechny jsou rovny nula ve svém typu

Zrušení proměnné

Narozdíl od C++ není nutné tuto část nějak ošetřovat. Java v sobě nese Garbage Collection, který se sám stará o čištění paměti tj. o odstraňování proměnných či objektů, které již nebudou v následujícím kódu použity.

Přestože, je celý tento proces automatizovaný, lze ho do jisté míry ovlivňovat. Více informací se dozvíte v mém již dříve publikovaném článku Garbage Collection.

Primitivní datové typy

Tak se po dlouhé oklice dostáváme opravdu k datovým typům. Tyto primitivní datové typy občas nazýváme jako základní datové typy. Rozdělil bych je do několika druhů — celočíselné, reální, znakové a ostatní.

Název typu

Velikost

Rozsah

boolean 1 bit true či false
byte 1 bajt od –128 do +127
short 2 bajty od –32768 do +32 767
int 4 bajty od –2147483648 do +2147483647
long 8 bajtů od –9223372036854775808 do +9223372036854775807
float 4 bajty +–3.40282347E+38
double 8 bajtů +–1.79769313486231570E+308
char 2 bajty 65536 různých znaků

Velikost je závádějící číslo, protože tuto velikost používáte spíše jako možný rozsah. Neříká tedy absolutně nic o tom, kolik ve skutečnosti tento typ zabírá v paměti. Normálně by se to dalo zjistit přes sizeOf, ten ovšem Java nepodporuje.

Bylo by vcelku dobré si povšimnout, že všechny zde uvedené typy jsou symetrické tj. od – do +. Tím chci naznačit, že zde zcela chybí takové typy jako jsou v Pascalu Word, což jsou tzv. unsigned tj. nemají znaménko + či –.

Pozor na byte: v Pascalu má rozsah od 0 do 255, ale v Javě je do –127 do +128. To vám může z počátku způsobovat problémy!

Tyto celočíselné typy v průběhu psaní zdrojového kódu můžete zapisovat několika rovnocennými způsoby:

  • desítkově — 1, 12, 128
  • osmičkově — 023, 0, 06 (začínají nulou)
  • šestnásctkově — 0xAF, 0x0, 0x12

Další skupinou jsou reálné typy neboli číslo s pohyblivou řádovou čárkou.

Název typu

Velikost

Rozsah

float 4 bajty +–3.40282347E+38
double 8 bajtů +–1.79769313486231570E+308

Jak vidno obory hodnot obou typů jsou asymetrické. Naštěstí tyto typy jsou definovány stejně snad ve všech jazycích, takže zde nebude nastávat stejný problém jako u byte. V kódu je lze zapisovat následovně 1., –23.2, 5E+7, 3e-5 apod.

Musím dodat, že tyto typy mohou navíc obsahovat, pro někoho možná nepochopitelně, speciální hodnoty. Jsou jimi +–nekonečno a není číslo. K obou hodnotám se můžete propracovat standardními matematickými operacemi! Ukažme si příklad jak je získat či zjistit:

     double zero = 0.0;
     double res = -7. / zero;
     System.out.println(res);
     if  (Double.isInfinite(res) == true) {
           System.out.println("nekonecno");
     }

     double res = zero / zero;
     System.out.println(res);
     if  (Double.isInfinite(res) == true) {
           System.out.println("není cislo");
     }

Mezi další druh primitivních datových typů zcela jistě patří znakové. Tento druh reprezentuje jediný zástupce a to char.

Název typu

Velikost

Rozsah

char 2 bajty 65536 různých znaků

Zde se již projevuje zmíněný Unicode, který způsobuje, že char není 1 bajtový jako ve většině jazyků a reprezentuje jen znak z aktuální znakové sady. Javou použitý způsob má tu výhodu, že můžete používat de-facto všechny známé znaky bez starostí jestli se dobře zobrazí.

[-more-]{Escape sekvence, další typy}

Jenže jak tyto znaky zapisovat? Dobrá otázka.

  • jako jediný znak např. všechny znaky z ASCII, což jsou anglické znaky např. 'A'. Jakékoliv jiné znaky s diakritikou a podobně se musí zapisovat následujícím způsobem
  • escape sekvence — tímto způsobem lze zapsat absolutně každý znak, ale vzhledem k jejich zjevné nečitelnosti se tento způsobe omezuje na minimum. Sekvence se skládá z zpětného lomítka následovaného čtveřicí šestnásctkových čísel tedy '\uXXXX'.

Tudíž podle následující tabulky budete muset všechny diakritické znaky zapisovat tímto způsobem např. 'á' zapíšete jako '\u00E1'.

00C1 Á 010F ď 00EE î 00F6 ö 00DA Ú
00C2 Â 00C9 É 013D Ĺ 0154 Ŕ 00DC Ü
00C4 Ä 00CB Ë 013E ĺ 0158 Ř 016F ů
00E1 á 011A Ě 0147 Ň 0155 ŕ 00FA ú
00E2 â 00E9 é 0148 ň 0159 ř 00FC ü
00E4 ä 00EB ë 00D3 Ó 0160 Š 00DD Ý
00DF ß 011B ě 00D4 Ô 0161 š 00FD Ý
010C Č 00CD Í 00D6 Ö 0164 Ť 017D ý
010D č 00CE Î 00F3 ó 0165 ť 017D Ž
010E Ď 00ED í 00F4 ô 016E Ů 017E ž

Asi bych měl dodat, že tento zápis je požadovaný pouze pro kód, který interpretuje překladač. Což znamená, že v komentářích můžete nadále psát pěkně česky, protože je překladač přeskakuje.

Poznámka autora: kdesi předtím, jsem mluvil o identifikátoru, že de-facto nemůže obsahovat diakritické znaky, což není zcela pravda. Např. identifikátor čítač by mohl vypadat takto (otázkou je zda je to čitelnější než když to napíšete v cestine tj. bez diakritiky):

     int \u010D\u00EDta\u010D; // to je pěkně prosím identifikátor čítač
  • osmičkový zápis tj. '\000'— všechny znaky jsou nutné, tedy i nuly na začátku jsou významové např. '\012' (LF)
  • speciální escape — asi poslední způsob zápisu. Vypadá jako převzatý z C, přičemž i následující znaky, jak uvidíte, se dají zapsat i normálním escape sekvencí.
  • Sekvence

    Hodnota

    Popis

    '\b' \u0008 zpět (backspace — BS)
    '\t' \u0009 tabulator (tab)
    '\n' \u000A nový řádek (linefeed — LF)
    '\r' \u000D začátek řádky (carriage return — CR)
    '\"' \u0022 uvozovky (quote)
    '\'' \u002C apostrof (single quote)
    '\\' \u005C zpětné lomítko (backslash)

    Mezi jedny z posledních primitivních typů patří boolean — logický datový typ.

    Název typu

    Velikost

    Rozsah

    boolean 1 bit true či false

    Jelikož je oproti C v javě boolean pouze 1 bitový nelze do něj ukládat hodnotu 0 či 1, ale pouze true či false. Proto budete potřebovat umět tyto typy převádět, což není nic těžkého a ukážeme si to za pár odstavců.

         boolean b;
         b = true;
         boolean b_2 = false;

    Snad již posledním primitivním datovým typ je void — prázdný datový typ. Ten se téměř výlučně používá u metod, které nic nevrací 1. Typickým představitel je metoda main.

    public  class  HelloWorld
    {
         public  static  void  main(String  args[]) {
              System.out.println("Hello")
         }
    }

    1. – v Pascalu se jim říká procedury

    Obsah seriálu (více o seriálu):

    Tématické zařazení:

     » Rubriky  » Java  

     

     

     

    Nejčtenější články
    Nejlépe hodnocené články

     

    Přihlášení k mému účtu

    Uživatelské jméno:

    Heslo: