Back Up Next

Kazalcev ni - vse so kazalci

 
Ko deklariramo nek objekt, deklariramo v bistvu ročico (handle) na ta objekt (kazalec).
Objekt moramo potem eksplicitno narediti z ukazom new.
class test {
    public static void main(String argv[ ]) {
        Alien a;        // ročica na Alien objekt
        Alien b[ ];      // polje ročic na Alien objekt
                
        a=new Alien();  // naredimo objekt
        b=new Alien[10]; // naredimo polje ročic na Alien
        for (int i=0;i<10;i++)
            b[i]=new Alien(); // naredimo posamezne Alien objekte
    }
}

Prenašanje argumentov metodam


Če objekte podajamo kot argumente metodam, se vedno prenesejo po referenci in ne po vrednosti. Osnovni tipi se vedno prenesejo po vrednosti
class Alien {
    int x;
}

class KillAlien {
    void kill(Alien a) { 
        a.x=0;
    }
    void changeValue(int i) {
        i=10;
    }
}

class test {
    public static void main(String argv[ ]) {
        Alien a=new Alien();
        a.x=10;
                
        KillAlien ka=new KillAlien();
        System.out.println("A prej " + a.x);
        ka.kill(a);  // argument je objekt
        System.out.println("A potem " + a.x);

        int j=1;
        System.out.println("j prej " + j);
        ka.changeValue(j);  // argument je osnovni tip
        System.out.println("j potem " + j);
    }
}

Prirejanje objektov


Če želimo narediti duplikat nekega objekta, moramo oba objekta narediti z new in nato prekopirati vrednosti. Izraz a=b ne naredi kopije objekta b!!!
class Alien {
    int x;
}
class test {
    public static void main(String argv[ ]) {
        Alien a=new Alien();
        Alien b;
        
        b=a;    // še vedno imamo le en objekt; obe ročici kažeta nanj
        a.x=5; 
        b.x=10; // ker je objekt le en, se bo tudi pri a-ju spremenila vr.
        System.out.println(a.x); // obakrat se bo izpisala 10
        System.out.println(b.x);
        
        b=new Alien(); // naredimo nov objekt
        a.x=5;
        b.x=10;
        System.out.println(a.x); // izpisali se bosta različni vrednosti
        System.out.println(b.x); 
    }
}
Back Up Next