22 Şubat 2015 Pazar

Hadi Java Öğrenelim - Constructors (Yapıcı Metodlar)

Constructors yani "yapıcılar" javada nesneleri ilklendirmek(initialize) için kullanılan özel metotlardır. Nesne oluşturulma aşamasında çağrılırlar ve nesne için gerekli olan ilk ayarlama gibi işlemlerin yapılmasına imkan verirler.

Javada constructor oluşturmanın 2 kuralı vardır.

- Constructor ismi sınıf ismi ile aynı olmalıdır.
- Constructorlar açık şekilde tanımlı bir değer tipi döndürmezler.

Daha önceki destede belirttiğim gibi 2 türde olabilirler.

- Parametre almayan default-constructor
- Parametre alan constructor

Eğer bir formül isterseniz;

Default Constructor     : <sınıf_adı>(){}
Parametreli Constructor : <sınıf_adı>(parametreler){}

Eğer siz herhangi bir constructor tanımlamazsanız derleyici sizin yerinize boş bir default constructor tanımlayacaktır.

Aşağıdaki örnekte Araba1 sınıfının Araba1() adında bir default constructor'ı var. Yaptığı şey ise sadece ekrana "Araba Olusturuldu" yazmak. Nitekim daha önceki derste yaptığımız gibi bir main() metodu içerisine bu sınıfın bir nesnesini sadece aşağıdaki gibi tanımlayıp programı çalıştırırsak, nesnenin oluşturulma aşamasında constructor çağrılacağından ekrana "Araba Olusturuldu" yazılacaktır.

class Araba1{
Araba1() { System.out.println("Araba Olusturuldu"); }
public static void main(String args[]){
Araba1 a = new Araba1();
}
}

Program Çıktısı:

Araba Olusturuldu


Bir önceki yazımda parametre alan constructor'ı göstermiştim. Yukarıda da zaten formülize ettim. Aşağıdaki örneği inceleyip anlamaya çalışalım.


class Ogrenci{
String isim;
int numara;

Ogrenci(String ogrenciAdi, int ogrenciNumarasi){
isim = ogrenciAdi;
numara = ogrenciNumarasi;
}

void goster(){  System.out.println(numara + " " + isim); }

public static void main(String args[]){
Ogrenci s = new Ogrenci("Sherlock",221);
Ogrenci w = new Ogrenci("Watson",122);
s.goster();
w.goster();
}
}

Program Çıktısı:

221 Sherlock
122 Watson


Ogrenci sınıfının constructor'ı aldığı iki parametreyi (ogrenciAdi, ogrenciNumarasi) sınıfın isim ve numara değişkenlerine atayacaktır. goster() metodu sadece ekrana numara ve isim değerlerini aralarında bir boşluk bırakarak yazdırır. main() metoduna bakarsak nesneleri oluşturma aşamasında constructor'a parametre değerlerini ("Sherlock",221 ve "Watson",122)  verdik. Sonraki satırda ise bu sınıfın goster() metodu ile ekrana bu değerleri yazdırmış olduk. Program çıktısı verildiği gibi olacaktır.

[ Üzerinde durmaya gerek yok ama yeri geçti belirteyim. Sınıfın bir üyesine (değişken veya metod) ulaşmak için nesne isminden sonra "." koyuyoruz, s.goster() gibi. ]

Yine bir önceki ders belirttiğim gibi bir sınıfın birden fazla constructor'ı olabilir. Nasıl olur ? Eğer farklı parametrelere sahipse olur. Siz nesne oluşturma aşamasında ne tür parametre kullanıyorsanız ilgili constuctor otomatik olarak çağrılacaktır.


class Ogrenci{
int numara = 0;
String isim = "???";

Ogrenci(){}
Ogrenci(int ogrenciNumarasi){ numara = ogrenciNumarasi; }
Ogrenci(String ogrenciAdi){ isim = ogrenciAdi; }
Ogrenci(String ogrenciAdi, int ogrenciNumarasi){
isim = ogrenciAdi;
numara = ogrenciNumarasi;
}

void goster(){  System.out.println(numara + " " + isim); }

public static void main(String args[]){
Ogrenci a = new Ogrenci();
Ogrenci b = new Ogrenci(333);
Ogrenci c = new Ogrenci("Jill");
Ogrenci d = new Ogrenci("Superman",444);

a.goster();
b.goster();
c.goster();
d.goster();

}
}

Program Çıktısı:

0 ???
333 ???
0 Jill
444 Superman



Görüldüğü gibi bu örnekte tam 4 tane  cosntructor var. İlki boş bir dafault constuctor, herhangi bir işlem yapmıyor. Dolayısıyla bu constructor ile oluşturulan a nesnesinin çıktısı başlangıçta tanımlanmış numara = 0 ve isim = "???" değerlerini veriyor. İkincisi sadece ogrenciNumarasi diye bir parametreli bir constructor. Yaptığı iş aldığı değeri numara değişkenine atamak, isim değişkenine herhangi bir değişiklik yapmıyor. Dolayısıyla bu constructor ile oluşturulan b nesnesinin çıktısı "333 ???" şeklinde. Üçüncü cosntuctor da ikinciye benzer, bu sefer sadece isim değişkenini aldığı parametre ile değiştiriyor, haliyle çıktısı "0 Jill". Son constuctor iki parametre alarak iki değişkeninde değiştiriyor, bunun çıktısı ise görüldüğü gibi "444 Superman".

Örnekten de anlaşıldığı üzere aldığı parametreleri değiştirerek istediğimiz kadar constructor yazabilirsiniz.

Bir sonraki yazıda görüşmek üzere
İyi çalışmlar

@Emin_Ucer

Hiç yorum yok:

Yorum Gönder