Konstruktor u Javi
Konstruktor je specijalni tip metode koji se koristi da inicijalizuje objekat. Konstruktor se poziva u trenutku kreiranja objekta. On konstruiše vrednosti, tj. obezbeđuje podatke za objekat i otuda mu to ime.
Primer 1: Kreiranje podrazumevanog konstruktora u klasi Bike. On će biti pozvan u trenutku kreiranja objekta.
Pravilo: Ako nema konstruktora u klasi, kompajler automatski kreira podrazumevani konstruktor. Svrha postojanja podrazumevanog konstruktora je da obezbedi podrazumevane (default) vrednosti za objekat, npr. 0, null itd., u zavisnosti od tipa.
Primer 2: Podrazumevani konstruktor koji prikazuje podrazumevane vrednosti.
Objašnjenje: U ovoj klasi nije kreiran nikakav konstruktor, tako da kompajler obezbeđuje podrazumevani konstruktor. Vrednosti 0 i null je obezbedio podrazumevani konstruktor.
2) Parametrizovani konstruktor Ovaj konstruktor ima parametre i koristi se da obezbedi različite vrednosti za zasebne objekte.
Primer 3: Kreiranje konstruktora klase Student4 koji ima dva parametra. Moguće je imati bilo koji broj parametara u konstruktoru.
Napomena: Ponegde se može naći u literaturi naziv instancna metoda za one metode u klasi koje nisu konstruktor.
Primer 6: Kopiranje vrednosti jednog objekta u drugi dodjeljivanjem vrednosti jednog objekta drugom . U ovom slučaju nema potrebe za kreiranjem konstruktora.
Napomena: Konstruktor može izvršiti i druge zadatke osim inicijalizacije, kao što su kreiranje objekta, pozivanje metode itd. Bilo koja operacija se može izvršiti u konstruktoru kao i u metodi.
Pravila za kreiranje konstruktora
U osnovi, postoje dva definisana pravila za konstruktore:- Ime konstruktora mora biti isto kao ime njegove klase
- Konstruktor ne sme vraćati nikakav određeni tip (čak ni void)
Tipovi konstruktora
Postoje dva tipa konstruktora:- Podrazumevani (default, no-arg) konstruktor
- Parametrizovani konstruktor
1 |
<ime_klase>(){} |
1
2
3
4
5
6
7
8
9 |
class Bike1{ Bike1(){System.out.println( "Bike je kreiran" );} public static void main(String args[]){ Bike1 b= new Bike1(); } } Ispis na ekranu: Bike je kreiran |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
class Student3{ int id; String name; void display(){System.out.println(id+ " " +name);} public static void main(String args[]){ Student3 s1= new Student3(); Student3 s2= new Student3(); s1.display(); s2.display(); } } Ispis na ekranu: 0 null 0 null |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
class Student4{ int id; String ime; Student4( int i,String n){ id = i; ime = n; } void display(){System.out.println(id+ " " +ime);} public static void main(String args[]){ Student4 s1 = new Student4( 111 , "Petar" ); Student4 s2 = new Student4( 222 , "Marko" ); s1.display(); s2.display(); } } Ispis na ekranu: 111 Petar 222 Marko |
Preopterećenje (overloading) konstruktora
Ovo je tehnika u Javi u kojoj klasa može imati bilo koji broj konstruktora koji se razlikuju u parametarskim listama. Kompajler pravi razliku između ovih konstruktora tako što uzima u obzir broj parametara u listi i njihov tip. Primer 4: Preopterećenje konstruktora
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 |
class Student5{ int id; String ime; int starost; Student5( int i,String n){ id = i; ime = n; } Student5( int i,String n, int a){ id = i; ime = n; starost=a; } void display(){System.out.println(id+ " " +ime+ " " +starost);} public static void main(String args[]){ Student5 s1 = new Student5( 111 , "Petar " ); Student5 s2 = new Student5( 222 , "Marko" , 25 ); s1.display(); s2.display(); } } Ispis na ekranu: 111 Petar 0 222 Marko 25 |
Razlika između konstruktora i metode
Konstruktor | Metoda |
Konstruktor se koristi da inicijalizuje stanje objekta | Metoda se koristi da izrazi ponašanje objekta |
Konstruktor ne sme imati return tip | Metoda mora imati return tip |
Konstruktor se poziva implicitno | Metoda se poziva eksplicitno |
Java kompajler obezbeđuje podrazumevani konstruktor ako nema konstruktora | Metodu ne obezbjeđuje kompajler ni u kom slučaju |
Ime konstruktora mora biti isto kao ime klase | Ime metode može ali i ne mora biti isto kao ime klase |
Kopiranje vrednosti jednog objekta u drugi (kao konstruktor kopije u C++)
Postoji mnogo načina za kopiranje vrednosti jednog objekta u drugi. Neki od njih su:- Pomoću konstruktora
- Dodeljivanjem vrednosti jednog objekta drugom
- Pomoću metode clone() iz klase Object
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 |
class Student6{ int id; String ime; Student6( int i,String n){ id = i; ime = n; } Student6(Student6 s){ id = s.id; ime =s.ime; } void display(){System.out.println(id+ " " +ime);} public static void main(String args[]){ Student6 s1 = new Student6( 111 , "Petar" ); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } } Ispis na ekranu: 111 Petar 111 Petar |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
class Student7{ int id; String ime; Student7( int i,String n){ id = i; ime = n; } Student7(){} void display(){System.out.println(id+ " " +ime);} public static void main(String args[]){ Student7 s1 = new Student7( 111 , "Petar" ); Student7 s2 = new Student7(); s2.id=s1.id; s2.ime=s1.ime; s1.display(); s2.display(); } } Ispis na ekranu: 111 Petar 111 Petar |