JAVA PAGRINDAI DETALIAU

Java new raktažodis

Raktažodis new liepia Java sukurti naują objektą arba masyvą. Paprastai tariant, deklaracija suteikia kintamajam vardą, o new paruošia tikrą vietą duomenims.

Naujo objekto sukūrimas

Sukurkime kasdienį objektą – puodelį, turintį spalvą:

class Puodelis {
    String spalva;

    Puodelis(String spalva) {
        this.spalva = spalva;
    }
}

Puodelis manoPuodelis = new Puodelis("mėlynas");
System.out.println(manoPuodelis.spalva);
Konsolės rezultatas

mėlynas

  1. Puodelis yra klasė – būsimo objekto aprašymas.
  2. manoPuodelis yra kintamasis, kuriame bus saugoma nuoroda į objektą.
  3. new Puodelis("mėlynas") sukuria naują Puodelis objektą.
  4. Skliaustuose perduota reikšmė patenka į konstruktorių, o šis nustato objekto spalvą.
  5. Operatorius = išsaugo nuorodą kintamajame manoPuodelis.

Deklaracija dar nesukuria objekto

Puodelis puodelis;

// Čia objektas dar nesukurtas.
puodelis = new Puodelis("žalias");
Konsolės rezultato nėra.

Šis kodas nieko nespausdina. Jis pirmiausia paskelbia kintamąjį, o tik vėliau sukuria objektą.

Eilutė Puodelis puodelis; yra panaši į tuščią etiketę su vardu. Tik įvykdžius new Puodelis(...) atsiranda objektas, į kurį ši etiketė gali rodyti.

new naudojimas su masyvu

Masyvui po tipo nurodome, kiek elementų vietų reikia sukurti:

int[] pazymiai = new int[3];

pazymiai[0] = 8;
pazymiai[1] = 10;

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

3
8
0

  1. new int[3] sukuria tris sunumeruotas vietas: 0, 1 ir 2.
  2. Java visas naujo int masyvo vietas iš pradžių užpildo skaičiumi 0.
  3. Pirmoms dviem vietoms priskiriame 8 ir 10.
  4. Trečios vietos nepakeitėme, todėl joje lieka pradinė reikšmė 0.

Ką reiškia skliaustai po klasės pavadinimo?

Knyga knyga = new Knyga("Mažasis princas");

Knyga nurodo kuriamos reikšmės klasę, o Knyga("Mažasis princas") iškviečia tinkamą jos konstruktorių. Konstruktorius paruošia pradinę objekto būseną.

Plačiau apie Java konstruktorius

Kiekvienas new paprastai sukuria atskirą objektą

Puodelis pirmas = new Puodelis("baltas");
Puodelis antras = new Puodelis("baltas");

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

false
true

  1. Abi eilutės sukuria po atskirą puodelio objektą.
  2. pirmas == antras tikrina, ar abi nuorodos rodo į tą patį objektą, todėl rezultatas yra false.
  3. Abiejų objektų spalvos tekstas vienodas, todėl equals() grąžina true.

Kas nutinka atminčiai?

Java pati valdo objektams skirtą atmintį. Kai sukurtas objektas programai tampa nebepasiekiamas, jį vėliau gali pašalinti šiukšlių surinktuvas (garbage collector). Programuotojui nereikia rankiniu būdu atlaisvinti atminties po kiekvieno new.

Ką verta prisiminti?

  • new sukuria naują objektą arba masyvą.
  • Kuriant objektą, iškviečiamas jo konstruktorius.
  • Kintamajame saugomas ne pats objektas, o nuoroda į jį.
  • Vien deklaruoti nuorodos kintamąjį nepakanka – objektas nuo to dar neatsiranda.
  • new int[3] sukuria tiksliai tris masyvo elementų vietas.
  • Java automatiškai prižiūri nebenaudojamų objektų atmintį.