Programmēšana

Masīvu masīvs

J: Kā es varu izmantot masīvu masīvu?

A:

String s = jauna virkne ("Sveika, pasaule"); // s ir virknes atsauce, kas attiecas uz // virknes objektu ar vērtību "Sveika, pasaule". s = jauna virkne ("Guten Tag, Welt"); // Tās pašas virknes atsauces s tagad atsaucas uz // citu String objektu; tas ir, // viena atsauce ir norādījusi uz diviem // dažādiem objektiem (secīgi). // (Ievērojiet, ka tagad mums ir objekts String // ar vērtību "Hello, World", kuram nav // atsauces; tāpēc šis objekts ir piemērots // atkritumu savākšanai) String t; // t ir virknes atsauce ar nulles vērtību // (neattiecas uz kādu objektu). // Ja jūs mēģināt izmantot t šajā brīdī, piem. ar // sakot int len ​​= t.length; jūs saņemsiet // NullPointerException (jāsauc // NullReferenceException). t = s; // String atsauce t tagad attiecas uz to pašu // objektu, uz kuru norāda virknes atsauces s, // proti, uz String objektu ar vērtību "Guten Tag, Welt". // Tātad šeit mums ir divas // atsauces uz vienu objektu (vienlaikus). 

Masīvi Java ir atsevišķi objekti, neatkarīgi no tā, vai tie satur primitīvus (ints, chars, būlas utt.) vai satur citus objektus. Tas nozīmē, ka masīvus sauc par jebkuru citu objektu, pievienojot [] apkopošanas / novirzīšanas semantika. Lūk, piemērs:

Stīgas [] sa; // sa ir nulles atsauce // mēģinot piekļūt sa.length, rodas NullPointerException. sa = jauna virkne [2]; // sa vairs nav nulles atsauce, tā attiecas uz konkrētu // objektu, kas ir divu nulles virknes atsauču masīvs. // sa.length tagad ir vienāds ar 2 // (sa [0] un sa [1] ir divas nulles virknes atsauces). sa [0] = "Sveika, pasaule"; sa [1] = "Gūtena Taga, Welt"; // Tagad sa attiecas uz divu nenulles virknes atsauču masīvu. sa = jauna virkne [1]; // sa.length equals 1 // Tā pati atsauce sa tagad attiecas uz atšķirīgu // (un īsāku) masīvu. // sa [0] ir nulles virknes atsauce // mēģinot piekļūt sa [1], rodas // ArrayIndexOutOfBoundsException. sa [0] = "Sveika, pasaule"; // sa [0] tagad nav nulle. 

Uz jūsu jautājumu par masīviem var atbildēt, to apsverot

Stīga [] [] saa; saa [0] [0] = "Palīdzība"; 

izraisīs a NullPointerException, jo saa ir nulles atsauce - tas ir, saa neattiecas uz nevienu objektu. Lai piešķirtu vērtību pirmā masīva pirmajam elementam, saa jāattiecina uz masīvu, kura garums ir lielāks par nulli, un saņem [0] ir jāatsaucas uz virknes masīvu, kuras garums ir lielāks par nulli. Tātad, vispirms varētu teikt:

Stīga [] [] saa; // saa ir nulles atsauce uz virkņu masīvu masīvu // mēģināšana saa.length jau izraisa NullPointerException, // tāpat kā mēģinot saa [0]. saa = jauna virkne [1] []; // tagad tagad attiecas uz masīvu ar 1 nulles atsauci uz virkni []. // saa.length ir vienāds ar 1. // saa [0] nav derīgs. saa [0] = jauna virkne [2]; // tagad tagad attiecas uz masīvu ar 1 atsauci, kas nav nulle, // uz virkni [], kuras garums ir 2. // saa.length joprojām ir vienāds ar 1. // saa [0] .length ir vienāds ar 2 (bet saa [0] [0] un // saa [0] [1] abi ir nulle). saa [0] [0] = "Sveika, pasaule"; saa [0] [1] = "Guten Tag, Welt"; // Tagad saa [0] [0] un saa [0] [1] abi nav nulle. 

Ievērojiet, ka jūs nevarat atsaukties saņem [0] [0] līdz saņem [0] nav nekas, un jūs nevarat padarīt saņem [0] nonnull, kamēr jūs darāt saa nonnull. Būtībā masīvu masīvs jums ir jāveido pakāpeniski.

Masīvu atsauču inicializēšanai ir ērti lietojams stenogrāfs:

String [] [] saa = {{{"Sveiki, pasaule}, {" Gūtena atzīme, Welt "}}}}; // tas izveido String [] [] objektu, piemēram, iepriekš izveidoto //, un piešķir saiti atsauce uz šo objektu. // atstarpes mērķis ir uzsvērt, ka izveidotais // objekts ir vienas virknes masīvs [], kurā // ir divas virknes. 

Izmantojot šo stenogrāfiju, mūsu piemēru varētu pareizi uzrakstīt šādi:

Virkne [] [] saa = {{{"" Palīdzība "}}}; 

Tomēr tas padara saa attiecas uz virknes masīvu. Ņemiet vērā, ka iepriekšminētā sintakse darbojas tikai inicializējot masīva atsauci (inicializēšana ir īpašs piešķiršanas gadījums deklarēšanas brīdī). Vispārīgāks veids, kā izveidot jaunu masīvu un piešķirt to jaunai vai esošai masīva atsaucei, izskatās šādi (esošas atsauces gadījumā):

saa = new virkne [] [] {// ņemiet vērā tukšo [] [] - sastādītājs attēlo // izmēru (tukšs [] [] ir nepieciešams). {{"Sveiki"}, {"Pasaule"}} // tas ir saa [0], // ņemiet vērā komatu, atdalot saa [0] un saa [1] {{"Guten Tag"}, {"Welt"} } // tas ir saa [1]}; // tagad saa.length = 2, un saa [0] un saa [1] arī katram ir 2 garums 
Random Walk Computing ir lielākais Java / CORBA konsultāciju veikals Ņujorkā, kas koncentrējas uz finanšu uzņēmuma risinājumiem. Random Walk konsultanti, kas pazīstami ar vismodernākajām Java zināšanām, publicē Java un runā par to dažos pasaules cienījamākajos forumos.

Šo stāstu "Masīvu masīvs" sākotnēji publicēja JavaWorld.

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