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

7. DatovΘ typy

7.1. Zßkladnφ datovΘ typy

Zßkladnφ datovΘ typy jsou celoΦφselnΘ, znakovΘ, racionßlnφ a prßzdn² datov² typ void, kter² se pou╛φvß jen u metod.

7.1.1. CeloΦφselnΘ typy

Java rozeznßvß Φty°i celoΦφselnΘ datovΘ typy. Hodnoty v╣ech t∞chto typ∙ se uklßdajφ znamΘnkov∞ ve dvojkovΘm dopl≥kovΘm k≤du. Li╣φ se pouze velikostφ:

7.1.2. Znakov² typ

Jedin²m znakov²m typem v Jav∞ je ╣estnßctibitov² char. Hodnotami tohoto typu jsou ╣estnßctibitovΘ znaky Unicode (viz p°φloha C.).

7.1.3. Racionßlnφ typy

V Jav∞ si m∙╛eme vybrat ze dvou racionßlnφch typ∙. Zobrazenφ hodnot racionßlnφch typ∙ a operace s nimi jsou popsßny v norm∞ ANSI - IEEE.754 z roku 1985.

Ve t°φdßch Double a Float (z balφku java.lang) jsou pro oba typy definovßny konstanty NEGATIVE INFINITY, POSITIVE INFINITY, rovnajφcφ se zßpornΘmu a kladnΘmu strojovΘmu nekoneΦnu, a NaN. Konstanta NaN udßvß, ╛e v²sledek operace nenφ Φφslo a p°i porovnßnφ s ostatnφmi Φφsly i se sebou sam²m je v²sledek operace hodnota false. Tuto hodnotu lze testovat metodami Float.isNaN() a Double.isNaN().

Pozn.: Jakßkoliv aritmetickß operace s racionßlnφmi hodnotami nevyvolß ╛ßdnou v²jimku (narozdφl od celoΦφseln²ch typ∙, kde m∙╛e b²t vyvolßna v²jimka ArithmeticException). P°i d∞lenφ nulou je v²sledek operace +- nekoneΦno.

7.1.4. Logick² typ

Jedin²m logick²m typem v Jav∞ je boolean, pro kter² jsou definovßny dv∞ hodnoty: false (logickß 0) a true (logickß 1).

V²razy, jejich╛ v²sledkem je hodnota typu boolean, se pou╛φvajφ v p°φkazech if, switch, while a for.

7.2. ReferenΦnφ datovΘ typy

Java obsahuje dva neprimitivnφ datovΘ typy, a to objekty a pole. Tyto typy jsou oznaΦovßny jako referenΦnφ a pou╛φvajφ se podobn∞ jako ukazatele v jin²ch jazycφch. Hodnota reference v╣ak nenφ adresa, a proto s referencemi nelze provßd∞t ukazatelovou aritmetiku. Hodnotu neplatnΘ reference reprezentuje konstanta null.

7.2.1. Objekt

Jako typ objektu slou╛φ jmΘno t°φdy (viz 11.2.) nebo rozhranφ (viz 11.6.). Prßce s objekty viz 11.1..

Priklad 7.1.
Deklarace prom∞nnΘ t°φdy String (viz kap. 14.) a rozhranφ Runnable (viz 16.2.):
String retezec;
Runnable vlakno;

7.2.2. Pole

Pole jsou zvlß╣tnφm typem objekt∙. (1) Vytvß°φ se operßtorem new:

   int[] pole = new int[100];   // vytvo°enφ pole o 100 prvcφch

a nebo statick²m inicializßtorem:

   int[] dny = {31,28,31,30,31,30,31,31,30,31,30,31};

V obou p°φpadech je pro pole pam∞╗ alokovßna dynamicky a ob∞ jsou automaticky zru╣ena, jakmile na n∞ neexistuje odkaz (viz 11.1.3.).

Vφcerozm∞rnß pole se deklarujφ jako pole polφ - poΦet dvojic hranat²ch zßvorek odpovφdß dimenzi pole.

Priklad 7.2.
int[][] dvojrozmernePole = new int[100][8];

Tato deklarace provede n∞kolik akcφ:

  1. Deklaruje prom∞nou dvojrozmernePole typu int[][]

  2. Dynamicky vytvo°φ pole o 100 prvcφch, kterΘ je typu int[][] a typ jeho jednotliv²ch prvk∙ je int[]

  3. Dynamicky vytvo°φ 100 polφ typu int[] o osmi prvcφch typu int

P°i vytvß°enφ vφcerozm∞rn²ch polφ nemusφ b²t uvedeny v╣echny rozm∞ry. Povinn² je pouze prvnφ, ostatnφ je mo╛nΘ vynechat. Nelze v╣ak vynechat rozm∞r "uprost°ed":

   int[][][] pole = new int[10][5][];   // OK
   int[][][] pole = new int[10][][4];   // Chyba!

Statickß inicializace vφcerozm∞rnΘho pole je podobnß jako u jednorozm∞rnΘho. Je mo╛nΘ inicializovat jen prvnφch n∞kolik prvk∙ v ka╛dΘm rozm∞ru a vytvo°it vφcerozm∞rnΘ pole s prom∞nnou dΘlkou °ßdk∙.

   int[][] ctverec = {{1,2},{3,4}};
   int[][] trojuhelnik = {{1,2,3},{1,2},{1}};

P°φstup k jednotliv²m prvk∙m pole se provßdφ p°es sou°adnice prvku, kterΘ jsou uvedeny v hranat²ch zßvorkßch za nßzvem pole. Indexovßnφ v╣ech rozm∞r∙ pole zaΦφnß od nuly. (2) Rozm∞ry ka╛dΘho pole lze zjistit pomocφ ΦlenskΘ prom∞nnΘ length:

Priklad 7.3.
int[][][] pole = new int[10][5][2];
int s1,s2,s3;

s1 = pole.length;                     //  do s1 se p°i°adφ 10
s2 = pole[0].length;                  //  do s2 se p°i°adφ 5
s3 = pole[0][0].length;               //  do s3 se p°i°adφ 2

Od JDK 1.1 je mo╛nΘ p°i vytvo°enφ inicializovat anonymnφ pole - syntaxe:

Priklad 7.4.
nejakyObjekt.metoda(new int[][] {{1,2},{3,4}});


  • (1) Pole jsou potomky t°φdy java.lang.Object (viz 11.5.). Jednorozm∞rnß pole lze tedy kopφrovat metodou clone(), Φßsti pole pak pomocφ metody System.arraycopy().
  • (2) K indexovßnφ lze pou╛φt pouze typ∙: byte, short, char a int.

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