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