OBJEKTINIS PROGRAMAVIMAS

Java nuorodų tipai

Nuorodos tipo kintamasis nelaiko visų objekto duomenų savyje. Jis nurodo objektą, per kurį galime pasiekti jo atributus ir metodus.

Primityvi reikšmė ir nuoroda

Primityvusis kintamasis, pavyzdžiui int kiekis = 3;, saugo pačią reikšmę 3. Nuorodos tipo kintamasis, pavyzdžiui Puodelis manoPuodelis, saugo nuorodą į konkretų objektą.

Primityviųjų ir nuorodų tipų palyginimas
SavybėPrimityvusis tipasNuorodos tipas
Pavyzdysint, double, booleanKlasė, masyvas, String, sąsaja
Kintamasis saugoPačią reikšmęNuorodą į objektą arba null
MetodaiNeturiObjektas gali turėti metodų
Numatytoji atributo reikšmėPriklauso nuo tipo, pvz., 0null
Nuoroda nėra pats objektas.

Ji leidžia Java virtualiajai mašinai rasti objektą. Programuotojui nereikia žinoti ar valdyti tikro jo adreso atmintyje.

Klasės objektas ir nuoroda

class Puodelis {
    String spalva;
}

public class Main {
    public static void main(String[] args) {
        Puodelis manoPuodelis = new Puodelis();
        manoPuodelis.spalva = "mėlyna";

        System.out.println(manoPuodelis.spalva);
    }
}
Konsolės rezultatas

mėlyna

  1. Puodelis aprašo naują nuorodos tipą.
  2. new Puodelis() sukuria naują objektą.
  3. manoPuodelis gauna nuorodą į sukurtą objektą.
  4. Per taško operatorių pasiekiamas to objekto atributas spalva.
  5. println() parodo objekte išsaugotą tekstą.

Dvi nuorodos į tą patį objektą

Priskyrus vieną nuorodos kintamąjį kitam, objektas nenukopijuojamas. Nukopijuojama nuoroda:

Puodelis pirmas = new Puodelis();
pirmas.spalva = "balta";

Puodelis antras = pirmas;
antras.spalva = "žalia";

System.out.println(pirmas.spalva);
System.out.println(antras.spalva);
Konsolės rezultatas

žalia
žalia

  1. Sukuriamas tik vienas Puodelis objektas.
  2. antras = pirmas neprideda naujo puodelio.
  3. Abu kintamieji nurodo tą patį objektą.
  4. Spalvą pakeitus per antras, pakeičiamas bendras objektas.
  5. Todėl per abi nuorodas perskaitoma ta pati nauja spalva.

Ką reiškia null?

Puodelis puodelis = null;

System.out.println(puodelis);
// puodelis.spalva sukeltų NullPointerException
Konsolės rezultatas

null

null reiškia, kad kintamasis šiuo metu nenurodo jokio objekto. Bandymas per tokią nuorodą pasiekti atributą ar iškviesti metodą sukelia NullPointerException.

Kas Java kalboje yra nuorodos tipai?

  • Klasės ir jų objektai, pavyzdžiui, Puodelis ar Scanner.
  • String – tekstui skirta klasė, nors ją dažnai naudojame panašiai kaip paprastą tipą.
  • Masyvai, net jei jų elementai yra primityvieji, pavyzdžiui, int[].
  • Sąsajos – nuoroda gali nurodyti sąsają įgyvendinančios klasės objektą.
  • Enum ir kolekcijos, pavyzdžiui, ArrayList ar HashMap.
int[] pazymiai = {8, 9, 10};
String vardas = "Rūta";

System.out.println(pazymiai[0]);
System.out.println(vardas.length());
Konsolės rezultatas

8
4

pazymiai nurodo masyvo objektą, o vardas – String objektą. Todėl galime pasiekti masyvo elementą ir iškviesti teksto metodą length().

Svarbiausia prisiminti

  • new paprastai sukuria naują objektą.
  • Nuorodos kintamasis leidžia tą objektą pasiekti.
  • Kelios nuorodos gali nurodyti tą patį objektą.
  • null reiškia, kad nuoroda objekto šiuo metu neturi.
  • Priskiriant nuorodą kitam kintamajam pats objektas automatiškai nekopijuojamas.