Konstruktor u Javi

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.

Pravila za kreiranje konstruktora

U osnovi, postoje dva definisana pravila za konstruktore:
  1. Ime konstruktora mora biti isto kao ime njegove klase
  2. Konstruktor ne sme vraćati nikakav određeni tip (čak ni void)

Tipovi konstruktora

Postoje dva tipa konstruktora:
  1. Podrazumevani (default, no-arg) konstruktor
  2. Parametrizovani konstruktor
1) Podrazumevani konstruktor Ovaj konstruktor nema parametara, a njegova sintaksa je:
1
<ime_klase>(){}
Primer 1: Kreiranje podrazumevanog konstruktora u klasi Bike. On će biti pozvan u trenutku kreiranja objekta.
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
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.
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
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.
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
  Napomena: Ponegde se može naći u literaturi naziv instancna metoda za one metode u klasi koje nisu konstruktor.

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
Primer 5: Kopiranje vrednosti jednog objekta u drugi pomoću 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
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
Primer 6: Kopiranje vrednosti jednog objekta u drugi dodjeljivanjem vrednosti jednog objekta drugom . U ovom slučaju nema potrebe za kreiranjem konstruktora.
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
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.

Comments

comments

Close Menu
Show Buttons
Hide Buttons