Java OOP Değer ve Referans Tipleri/ Yapıcılar( Constructor)
Pass By Value – Pass By Referance (Değer ve Referans Tipleri)
Bir örnek üzerinde anlatacak olursak, bir metodumuzun olduğunu varsayalım bu metod aldığı parametreleri ile 2 sayıyı toplasın. Burada Primitive (int , double , byte…) tiplerde değer yolladığımızda değerin kopyası gönderilir ve orijinal değeri bozulmaz. Referans tiplerde ise metoda eğerin kendisi gönderilir. Metodda olan değişikler, değişkenimizede yansır.
Şimdi Primitif tiplere bir örnek verelim ve değişkenin orijinal değerinin değişmediğini görelim;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package opp; public class Tipler { public static void main(String[] args) { int x=5; System.out.println("Eski değer:"+x); fonksiyon(x); System.out.println("yeni değer:"+x); } static void fonksiyon(int y) { y*=6; } } |
Yukarıda gördüğünüz gibi arkadaşlar ilk olarak değişkenimizi ekrana yazdırdık ardından ise metoda yolladık ve yeni değerini ekrana yazdırdık, fakat yeni değr 30 olması gerekirken yine eskiş değerini verdi. Çünkü primitif tiplerin gönerilen değrin kopya olduğu ve orjinal değer bozulmaığımdan eski değeri yazdı.
Şimdi referans (new anahtar kelimesi ile tanımladığını unutmayalım) tiplere örnek verelim;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package opp; public class Tipler { int x=5; public static void main(String[] args) { Tipler t=new Tipler(); t.x=5; System.out.println("Eski değer:"+t.x); fonksiyon(t); System.out.println("yeni değer:"+t.x); } static void fonksiyon(Tipler t) { t.x*=6; } } |
Bu örnekte gördüğünüz referans tipimiz orjinal gönderildiğinden, değerimiz metod içerisinde değişip ekrana yazdırıldı.
Dizilerimizde bir referans tipi olduğundan bir örnek üzerinen inceleyelim;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package opp; public class Tipler { public static void main(String[] args) { int array[]= {5,6,7,1}; System.out.println("Dizimizin eski 0. idisi:"+array[0]); fonksiyon(array); System.out.println("Dizimizin yeni 0. idisi:"+array[0]); } static void fonksiyon(int array[]) { array[0]*=6; } } |
Gördüğünüz gibi metodumuza yollaığımız değer değişti çünkü dizilerimide referans tipli olduğundan.
Yapıcılar (Constructor):
Yapıcılar, kısaca açıklarsak nesnenin ilk oluşturulduğunda alması gereken değerler, kullanacağı metodları belirler.
- Yapıcıların adı, sınıf adı ile aynı olmak zorundadır.
- Yapıcı metodlar, geriye herhangi bir değer döndürmezler.
- Yapıcı metodlar, aşırı yüklenebilirler.
Konumuzla ilgili örneğimize bakalım;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package opp; public class Yapicilar { int sayi1,sayi2; public Yapicilar()//parametre almayan yapıcı { sayi1=10; } public Yapicilar(int degisken)//parametre alan yapıcı { sayi2=degisken; } public static void main(String[] args) { Yapicilar nesne1=new Yapicilar(); Yapicilar nesne2=new Yapicilar(20); System.out.println("İlk nesne'nin değeri:"+nesne1.sayi1); System.out.println("İkinci nesne'nin değeri:"+nesne2.sayi2); } } |
Gördüğünüz gibi yukarda tanımladığımız kurallara uyarak parametre alan ve almayan yapıcılarımızı tanımladık, sonra oluşturdumuz nesneler ile değişkenlerimizin değerlerini ekrana yazdırdık.
Şimdiki örneğimizde ise yapıcı metodların nasıl overloading olduğunu gösterelim;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package opp; public class YapicilarOverloading { void metod1() { System.out.println("Parametre almayan möetod çağrıldı."); } void metod2(int sayi) { System.out.println("Parametre alan metod çağrıldı. "+sayi); } public YapicilarOverloading()//ilk yapıcı { metod1(); } public YapicilarOverloading(int sayi)//ikinci yapıcı { metod2(sayi); } public static void main(String[] args) { YapicilarOverloading nesne1=new YapicilarOverloading(); YapicilarOverloading nesne2=new YapicilarOverloading(50); } } |
Arkadaşlar bu bölümde Java’da Nesneye Yönelik Programlama Değer ve Referans Tipleri/ Yapıcılar( Constructor) anlatmaya çalıştık. Sizlerde bu örneklerle sınırlı kalmayıp güncel hayattan bir çok örnek program kodlayabilirsiniz takibiniz için teşekkürler… Bizi takip etmeye devam edin bol kodlu günler…