Programiranje

Niz nizov

V: Kako uporabim polje nizov?

A:

String s = new String ("Hello, World"); // s je referenca String, ki se nanaša na // predmet String z vrednostjo "Hello, World." s = nov niz ("Guten Tag, Welt"); // Isti sklic String se zdaj sklicuje // na drug objekt String; to pomeni, // en sklic se je skliceval na dva // različna predmeta (zaporedoma). // (Opazimo, da imamo zdaj objekt String // z vrednostjo "Hello, World", ki nima // sklicev; zato je ta objekt primeren // za zbiranje smeti) String t; // t je sklic na niz z ničelno vrednostjo // (ne nanaša se na noben objekt). // Če na tej točki poskusite uporabiti t, npr. tako, da // izgovorimo int len ​​= t.length; dobili boste // NullPointerException (imenoval bi ga // NullReferenceException). t = s; // Sklic String t se zdaj nanaša na isti // objekt, na katerega se sklicujejo reference String, // in sicer objekt String z vrednostjo "Guten Tag, Welt". // Tukaj imamo torej dve // ​​sklici na en sam predmet (hkrati). 

Nizi v Javi so sami po sebi predmeti, ne glede na to, ali vsebujejo primitive (ints, chars, logičnoitd.) ali vsebujejo druge predmete. To pomeni, da se na nize sklicuje kot na kateri koli drug objekt, z dodatkom [] semantika združevanja / razporejanja. Tu je primer:

String [] sa; // sa je ničelna referenca // poskušanje dostopa do sa.length povzroči NullPointerException. sa = nov niz [2]; // sa ni več ničelna referenca, nanaša se na določen // objekt, ki je niz dveh ničelnih sklicev na niz. // sa.length je zdaj enako 2 // (sa [0] in sa [1] sta dve ničelni sklici na niz). sa [0] = "Pozdravljen, svet"; sa [1] = "Oznaka Guten, Welt"; // Zdaj se sa sklicuje na matriko dveh ničelnih sklicev na niz. sa = nov niz [1]; // sa.length je enako 1 // Ista referenca sa se zdaj nanaša na drugo // (in krajše) polje. // sa [0] je ničelna referenca na niz // poskušanje dostopa do sa [1] povzroči // ArrayIndexOutOfBoundsException. sa [0] = "Pozdravljen, svet"; // sa [0] zdaj ni nič. 

Če upoštevate to, lahko odgovorite na vaše vprašanje o nizih

String [] [] saa; saa [0] [0] = "Pomoč"; 

bo povzročil a NullPointerException, Ker saa je ničelna referenca - to je, saa se ne nanaša na noben predmet. Če želite prvemu elementu prvega polja dodeliti vrednost, saa se mora nanašati na matriko z dolžino, večjo od nič, in saa [0] se mora nanašati na ničelno niz nizov, katerega dolžina je prav tako večja od nič. Torej, lahko bi začeli z besedami:

String [] [] saa; // saa je ničelna referenca na niz nizovnih nizov // Poskus saa.length že povzroči NullPointerException, // tako kot poskusi saa [0]. saa = nov niz [1] []; // saa se zdaj nanaša na polje z 1 ničelno referenco na niz []. // saa.length je enako 1. // saa [0] je nič. saa [0] = nov niz [2]; // saa se zdaj nanaša na matriko 1 ne-ničelne sklice // na niz [] dolžine 2. // saa.length je še vedno enak 1. // saa [0] .length je enako 2 (vendar saa [0] [0] in // saa [0] [1] sta nični). saa [0] [0] = "Pozdravljen, svet"; saa [0] [1] = "Guten Tag, Welt"; // Zdaj saa [0] [0] in saa [0] [1] nista nič. 

Upoštevajte, da se ne morete sklicevati na saa [0] [0] do saa [0] ni nič in ga ne morete narediti saa [0] nonnull, dokler ne naredite saa ničen. V bistvu morate vrsto nizov graditi postopoma.

Za inicializiranje sklicev na matriko obstaja enostavna kratica:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // to ustvari predmet String [] [], kakršen je bil ustvarjen // zgoraj, in saa dodeli se nanašajo na ta objekt. // Presledek naj bi poudaril, da je // ustvarjeni objekt matrika enega niza [], ki // vsebuje dva niza. 

Z uporabo te kratice bi lahko naš primer pravilno zapisali kot:

Niz [] [] saa = {{{"" Pomoč "}}}; 

Vendar to pomeni saa nanašajo se na niz nizov enega za drugim. Upoštevajte, da zgornja sintaksa deluje samo pri inicializaciji sklica na matriko (inicializacija je poseben primer dodelitve v času deklaracije). Splošnejši način za ustvarjanje novega polja in njegovo dodelitev novemu ali obstoječemu sklicu na matriko je videti tako (v primeru obstoječega sklica):

saa = new String [] [] {// upoštevajte prazno [] [] - prevajalnik izračuna // velikost (potrebno je prazno [] []). {{"Hello"}, {"World"}} // to je saa [0], // upoštevajte vejico, ki ločuje saa [0] in saa [1] {{"Guten Tag"}, {"Welt"} } // to je saa [1]}; // zdaj saa.length = 2 in tudi saa [0] in saa [1] imata dolžino 2 
Random Walk Computing je največji svetovalni butik Java / CORBA v New Yorku, ki se osredotoča na rešitve za finančno podjetje. Svetovalci Random Walk, znani po svojem vrhunskem znanju o Javi, objavljajo in govorijo o Javi na nekaterih najbolj spoštovanih forumih na svetu.

To zgodbo "Niz nizov" je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found