Blok inicijalizator instance / Non-static instance initialization
Blok inicijalizator instance se koristi da inicijalizuje podatak-član instance. On se pokreće svaki put kada se kreira objekat klase. Inicijalizacija instancne promenljive može biti direktna, ali moguće je izvršiti i neke dodatne operacije prilikom inicijalizovanja instancne promenljive u bloku inicijalizatoru instance. Zašto se koristi blok inicijalizator instance? Znamo da je moguće direktno dodeliti vrednost podatku-članu instance. Npr.
Pretpostavimo da moramo izvršiti neke operacije prilikom dodeljivanja vrednosti podatku-članu instance, npr. for petlju koja će popuniti neki kompleksni niz ili rukovanje greškama itd. Primer bloka inicijalizatora instance: Pogledajmo jednostavan primer bloka inicijalizatora instance koji izvršava inicijalizaciju
Postoje tri mesta u Javi gde se mogu izvoditi operacije: 1. metoda 2. konstruktor 3. blok
Da li se prvo poziva blok inicijalizator instance ili konstruktor?
U ovom primeru, izgleda kao da je blok inicijalizator instance prvi pozvan, ali zapravo nije.
Blok inicijalizator instance je pozvan u vreme kreiranja objekta. Java kompajler kopira blok inicijalizator instance u konstruktor nakon prve naredbe super(). Tako je prvo pozvan konstruktor. Ovo je pokazano na sledeć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:
Primer 2:
a na engleskom:
1
2
3 |
class Bike{ int speed= 100 ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
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 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
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 |

- Blok inicijalizator instance je kreiran kada je kreirana instanca klase.
- Blok inicijalizator instance se poziva nakon što je pozvan konstruktor roditeljske klase (napr. nakon poziva super() konstruktora).
- Blok inicijalizator instance dolazi po redu po kome se pojavljuje.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
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-deteta |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
class A{ A(){ System.out.println( "pozvan je konstruktor roditeljske klase" ); } } class B3 extends A{ B3(){ super (); System.out.println( "pozvan je konstruktor klase-deteta" ); } B3( int a){ super (); System.out.println( "pozvan je konstruktor klase-deteta" +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-deteta pozvan je konstruktor roditeljske klase Blok inicijalizator instance pozvan je konstruktor klase-deteta 10 |