Polia v Jave, podobne ako v inych jazykoch, nesu tu istu myslienku:
Vytvorit spolocny identifikator pre viac premennych rovnakeho typu.
Polia su v Jave dynamicky vytvarane a mozu byt priradene premennym typu
Object. To znamena, ze vsetky metody z triedy Object
mozu byt pouzite v ramci pola. Mozno sa Vam bude o chvilu zdat, ze
vytvaranie pola je trochu komplikovane a zdlhave, ale je dynamicke!
Aby sme mohli pole pouzivat vo svojom kode, musime ho najprv deklarovat.
Samotna deklaracia pozostava z dvoch komponentov. Su to typ a
identifikator - meno pola.
Ak chceme deklarovat pole typu Integer, dosiahneme to tymto
sposobom:
Integer[] MenoPola;
Takto sme ho deklarovali. Este ho rozhodne nemozeme pouzivat,
pretoze takymto zapisom sme nealokovali ziadnu pamet.
Na jej alokovanie pouzijeme operator new:
Integer[] MenoPola = new Integer[128];
Tu si musime povedat dalsiu vec. Pole, ktore sme prave vyvorili, este
urcite nesplna nase predstavy. Nemozeme totiz urobit nasledujucu vec:
MenoPola[4] = 77;
Preco? Pretoze to, co mame zatial vytvorene, je pole, ale pozostava z
referencii na typ Integer. Neobsahuje konkretne prvky typu
Integer!
(Mohol by som tu tak tajne urobit taku transformaciu
do Cecka: nase pole zatial obsahuje len ukazovatele na prvky typu
Integer a nie samotne prvky! V Jave vsak o ukazovateloch nemozeme
vobec hovorit, pretoze oficialne neexistuju. To, co mame k dispozicii,
volame referencia a je to v podstate ukazovatel, ktory nemozeme
presmerovat, pretoze na to nie su ziadne prostriedky.)
Ukazme si ako pripravit pole tak, aby sme s nim boli naozaj spokojni
a mohli ho plne vyuzit. Uvediem to cele od zaciatku, aby to bolo jasne.
Integer[] MenoPola = new Integer[128];
for (int j=0; j < MenoPola.length; j++)
MenoPola = new Integer();
MenoPola[2] = 7;
Pre jednoduche udajove typy, ktore nie su potomkami objektu
Object je to jednoduchsie. Vyzera to nasledovne:
int[] = new int[10];
int[2] = 24; // je to mozne!
float[] meranie = new float[1024];
meranie[67] = 11; // aj to je mozne!
Viacrozmerne polia
Je to celkom logicke. Je to analogicke s tym, co uz predpokladam,
ze poznate. Pozrite sa na to sami:
import java.io.*;
import java.lang.Integer;
// priklad na dvoj-rozmerne pole
class Array2 {
public static void main(String args[]) {
int i, j;
// deklaracia a vytvorenie pola (2D)
Integer pole[][] = new Integer[4][2];
// TU si alokujem pamet pre jednotlive prvky
for (i=0; i<4; i++)
for (j=0; j<2; j++)
pole[i][j] = new Integer();
// TAKTO s nimi pracujem (vypis prvkov pola)
for (i=0; i<4; i++)
{
for (j=0; j<2; j++)
System.out.print(pole[i][j].toString()+" ");
System.out.println();
}
System.out.println(); // printf("\n");
}
}//class Array2
Na koniec by som sa mohol este vratit k dynamickosti.
To, ze Java je interpretovana, prinasa aj jednu vyhodu.
Pri pisani kodu nemusime vediet ake velke bude pole,
staci ak je to jasne, predtym ako ho ideme alokovat.
Chcete na to priklad? Tu je:
...
int pocetPoloziek;
...
pocetPoloziek = 8;
...
// velkost pola zavisi od predchadzajuceho kodu
int[] Pole = new int[ pocetPoloziek ];
...
Pole[0]=0; // a ide to!
...
Tak, toto v Cecku neurobite! (da sa nieco podobne, ale nie takto bezpecne)