Programovanie

Pole

Otázka: Ako môžem použiť pole?

A:

Reťazec s = nový Reťazec („Hello, World“); // s je reťazcový odkaz, ktorý odkazuje na // reťazcový objekt s hodnotou „Hello, World“. s = nový reťazec ("Guten Tag, Welt"); // Rovnaké referencie reťazca s teraz odkazujú // na iný objekt reťazca; tj // jedna referencia odkazovala na dva // rôzne objekty (za sebou). // (Všimnite si, že teraz máme objekt String // s hodnotou „Hello, World“, ktorý nemá // referencie; preto je tento objekt vhodný // na zber odpadkov) String t; // t je odkaz na reťazec s nulovou hodnotou // (nevzťahuje sa na žiadny objekt). // Ak v tomto okamihu skúsite použiť t, napr. // vyslovením int len ​​= t.length; dostanete // NullPointerException (malo by sa volať // NullReferenceException). t = s; // Odkaz na reťazec t teraz odkazuje na rovnaký // objekt, na ktorý odkazuje odkaz na reťazec s, // a to objekt typu String s hodnotou „Guten Tag, Welt“. // Takže tu máme dva // odkazy na jeden objekt (súčasne). 

Polia v Jave sú samostatné objekty, či už obsahujú primitívy (ints, chars, booleans atď.) alebo obsahujú iné objekty. To znamená, že na polia sa odkazuje ako na každý iný objekt s pridaním [] sémantika agregácie / dereferencie. Tu je príklad:

Reťazec [] sa; // sa je nulová referencia // pokus o prístup k sa.length spôsobí NullPointerException. sa = nový reťazec [2]; // sa už null referencia, odkazuje na konkrétny // objekt, ktorý je poľom dvoch nulových referencií String. // sa.length je teraz rovný 2 // (sa [0] a sa [1] sú dva nulové odkazy na reťazce). sa [0] = "Dobrý deň, svet"; sa [1] = "Guten Tag, Welt"; // Teraz sa sa odkazuje na pole dvoch nenulových reťazcových odkazov. sa = nový reťazec [1]; // sa.length sa rovná 1 // Rovnaká referencia sa teraz odkazuje na iné // (a kratšie) pole. // sa [0] je nulový reťazcový odkaz // pokus o prístup k sa [1] spôsobí // ArrayIndexOutOfBoundsException. sa [0] = "Dobrý deň, svet"; // sa [0] má teraz nenulovú hodnotu. 

Na vašu otázku o poliach možno odpovedať tak, že to zvážite

Reťazec [] [] saa; saa [0] [0] = "Pomoc"; 

spôsobí a NullPointerException, pretože saa je nulový odkaz - to znamená, saa neodkazuje na žiadny objekt. Aby bolo možné priradiť hodnotu prvému prvku prvého poľa, saa musí odkazovať na pole s dĺžkou väčšou ako nula a saa [0] musí odkazovať na nenulové reťazcové pole, ktorého dĺžka je tiež väčšia ako nula. Dalo by sa teda začať slovami:

Reťazec [] [] saa; // saa je nulový odkaz na pole String polí // Skúšanie saa.length už spôsobuje NullPointerException, // ako to robí saa [0]. saa = nový reťazec [1] []; // saa teraz odkazuje na pole 1 nulového odkazu na String []. // saa.length sa rovná 1. // saa [0] je null. saa [0] = nový reťazec [2]; // saa teraz odkazuje na pole 1 nenulového odkazu // na reťazec [] dĺžky 2. // saa.length je stále rovný 1. // saa [0]. dĺžka je rovná 2 (ale saa [0] [0] a // saa [0] [1] sú obidve hodnoty null). saa [0] [0] = "Dobrý deň, svet"; saa [0] [1] = "Guten Tag, Welt"; // Teraz sú saa [0] [0] a saa [0] [1] nenulové. 

Všimnite si, na čo sa nemôžete odvolávať saa [0] [0] do saa [0] je nenulová a nemôžete urobiť saa [0] null, kým nevytvoríš saa null. V zásade musíte postupne zvyšovať svoje pole polí.

K dispozícii je ľahko použiteľný skratka na inicializáciu odkazov na pole:

String [] [] saa = {{{"" Hello, World}, {"Guten Tag, Welt"}}}}; // takto sa vytvorí objekt String [] [] ako ten, ktorý bol vytvorený // vyššie a saa sa priradí odkazuje na tento objekt. // Medzery majú zdôrazniť, že // objekt, ktorý je vytvorený, je pole jedného reťazca [], ktorý // obsahuje dva reťazce. 

Pomocou tejto skratky by sa dal náš príklad správne napísať ako:

Reťazec [] [] saa = {{{"Pomoc"}}}; 

Toto však robí saa odkazujú na pole reťazcov jeden po druhom. Upozorňujeme, že vyššie uvedená syntax funguje iba pri inicializácii referencie poľa (inicializácia je zvláštnym prípadom priradenia v čase deklarácie). Všeobecnejší spôsob vytvorenia nového poľa a jeho priradenia k novému alebo existujúcemu odkazu na pole vyzerá takto (v prípade existujúceho odkazu):

saa = nový reťazec [] [] {// všimnite si prázdne [] [] - kompilátor zistí veľkosť // (je potrebné prázdne [] []). {{"" Hello "}, {" World "}} // toto je saa [0], // všimnite si čiarku oddeľujúcu saa [0] a saa [1] {{" Guten Tag "}, {" Welt "} } // toto je saa [1]}; // teraz saa.length = 2, a saa [0] a saa [1] majú tiež dĺžku 2 
Random Walk Computing je najväčší konzultačný butik Java / CORBA v New Yorku so zameraním na riešenia pre finančné podniky. Konzultanti Random Walk, známi svojimi špičkovými odbornými znalosťami jazyka Java, publikujú a hovoria o jazyku Java na niektorých z najuznávanejších fór na svete.

Tento príbeh, „Array of arrays“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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