13. Blok inicijalizator instance /INSTANCE/

Blok inicijalizator instance se koristi da inicijalizira podatak-član instance. On se pokreće svaki put kada se kreira objekt klase. Inicijalizacija instansne varijable može biti direktna ali moguće je izvršiti i neke dodatne operacije prilikom inicijalizovanja instansne varijable u bloku inicijalizatoru instance. Zašto se koristi blok inicijalizator instance? Znamo da je moguće direktno dodijeliti vrijednost podatku-članu instance. Napr.

class Bike{  
    int speed=100;  
} 

Pretpostavimo da moramo izvršiti neke operacije prilikom dodjeljivanja vrijednosti podatku-članu instance, napr. for petlju koja će popuniti neki kompleksni niz ili rukovanje greškama itd. Primjer bloka inicijalizatora instance Pogledajmo jednostavan primjer bloka inicijalizatora instance koji izvršava inicijalizaciju

class Bike7{  
    int speed;  
      
    Bike7(){System.out.println("brzina je "+speed);}  
   
    {speed=100;}  
       
    public static void main(String args[]){  
    Bike7 b1=new Bike7();  
    Bike7 b2=new Bike7();  
    }      
}

Ispis na ekranu:
brzina je 100
      brzina je 100

Postoje tri mjesta u javi gdje se mogu izvoditi operacije: 1. metoda 2. konstruktor 3. blok Da li se prvo poziva blok inicijalizator instance ili konstruktor?

class Bike8{  
    int speed;  
      
    Bike8(){System.out.println("konstruktor je pozvan");}  
   
    {System.out.println("blok inicijalizator instance je pozvan");}  
       
    public static void main(String args[]){  
    Bike8 b1=new Bike8();  
    Bike8 b2=new Bike8();  
    }      
}

Ispis na ekranu:
blok inicijalizator instance je pozvan
       konstruktor je pozvan
       blok inicijalizator instance je pozvan 
       konstruktor je pozvan 

U ovom primjeru, izgleda kao da je blok inicijalizator instance prvi pozvan, ali zapravo nije. Blok inicijalizator instance je pozvan u vrijeme kreiranja objekta. Java kompajler kopira blok inicijalizator instance u konstruktor nakon prve naredbe super(). Tako je prvo pozvan konstruktor. Ovo je pokazano na sljedećoj slici: Napomena: java kompajler kopira kod bloka inicijalizatora instance u svaki konstruktor.

Pravila za blok inicijalizator instance: Postoje uglavnom tri pravila za blok inicijalizator instance. To su:

  1. Blok inicijalizator instance je kreiran kada je kreirana instanca klase.
  2. Blok inicijalizator instance se poziva nakon što je pozvan konstruktor roditeljske klase (napr. nakon poziva super() konstruktora).
  3. Blok inicijalizator instance dolazi po redu po kome se pojavljuje.

Primjer 1: blok inicijalizator instance koji se poziva nakon super()

class A{  
  A(){  
    System.out.println("pozvan je konstruktor roditeljske klase");  
  }  
}
  
class B2 extends A{  
  B2(){  
  super();  
  System.out.println("pozvan je konstruktor klase-djeteta");  
}  
  
{System.out.println("pozvan je blok inicijalizator instance");}  
  
  public static void main(String args[]){  
    B2 b=new B2();  
  }  
}

Ispis na ekranu:
pozvan je konstruktor roditeljske klase
Blok inicijalizator instance
pozvan je konstruktor klase-djeteta

Primjer 2:

class A{  
  A(){  
    System.out.println("pozvan je konstruktor roditeljske klase");  
  }  
}  
  
class B3 extends A{  
  B3(){  
    super();  
    System.out.println("pozvan je konstruktor klase-djeteta");  
  }  
  
  B3(int a){  
  super();  
  System.out.println("pozvan je konstruktor klase-djeteta"+a);  
}  
  
  {System.out.println("pozvan je blok inicijalizator instance");}  
  
  public static void main(String args[]){  
    B3 b1=new B3();  
    B3 b2=new B3(10);  
  }  
}
    
Ispis na ekranu:
pozvan je konstruktor roditeljske klase
Blok inicijalizator instance
pozvan je konstruktor klase-djeteta
pozvan je konstruktor roditeljske klase
Blok inicijalizator instance
pozvan je konstruktor klase-djeteta 10


Zadaci iz ovog poglavlja    Objektno orijentisano programiranje u Javi    Index