[]

java default constructor kullanmasak olur mu ?

efendim merhabalar ben şunu anlayamadım yardımcı olursan çok rahatlarım.
şimdi bir class nesnesini oluşturmak için new operatörü ile default constructor oluşturabilirim

birde new operatörü kullanmadan class ismi ile aynı bir constructor oluşturabiliriz

2 şekildede class'ın nesnesi oluşuyorsa yani bellekte yer ayırılıyorsa default constructor kullanmayalım ne gerek var direk class ismi ile aynı bir constructor oluşturalım (parametreli veya parametresiz) olsun bitsin olmaz mı ? teşekkür ediyorum.


edit cevap : örnek yok

 
zaten default constructor olusturmana gerek yok ki, sen constructor yazmasan bile arkada derleme zamaninda default constructor parametresiz sekilde olusturulur. ama eger sen dersen ki default olusturulan benim isime yaramaz, ben kendim olusturacam o zaman arkada default olani olusturmaz.


  • emrahday  (02.01.19 11:36:35) 
@emrahday merhaba yani new operatörü ile default constructor oluşturmaya gerek yok değil mi ?

biz parametresiz constructor oluşturduğumuz da zaten arka pilanda default constructor oluşuyor diyorsun ve parametreli 2. bir constructor oluşturduğunda da default constructor iptal oluyor diyorsun değil mi doğru mu anladım ?


isim isism1 = new isim(); buna gerek yok eğer


bunu yaptıysak

public isim (){ parametresiz
}
public isim (int sayi){parametreli
}

doğrumu anladım ? teşekkürler.
  • aristotelesin berberi  (02.01.19 11:47:38) 
@yazarken ellerini birakan herif

evet aradığım cevap Overloading' miş teşekkür ediyorum ben bu konuyu biraz araştıracağım size ekşi sözlükten java ile ilgili sorular sorup bilginizden yararlanmak isterim uygun görürseniz.

ama tekrar emin olmak istiyorum

aşağıdaki Overloading yöntem oluyor

public isim (){ parametresiz
}
public isim (int sayi){parametreli
}

peki Overloading yaptığımızda

aşağıdakine gerek olmuyor değil mi ?

isim isism1 = new isim(); -----Overloading yaptıysak buna gerek yok diyebilirmiyiz ?
  • aristotelesin berberi  (02.01.19 12:26:59) 
verdigin ornekte bikac kafa karisikligini gideryim;

"new" anahtar kelimse bir class dan obje olustrmak icin kullanir. Bu objeyi olustururken de o class icinde tanimli constructor kullanir.

public class Isim {
public Isim(){
}
}

yani bu ornekte "new Isim()" dediginde isim classina gider ve isim() constructorunu kullanarak bir obje olusturur. (Not: consructor ve class birebir ayni isme sahip olmali ve ikisinde de ilk harf hep buyuk olmali. )

constructor iki turlu tanimlanir, acik(explicit) veya kapali(implicit) seklinde. yani sen bu sekilde

public class Isim {
}

bir class yazdin, ama hicbir constructor yazmadin icine, java compiler derleme sirasinda otomatik olarak default constructor olusturur ve senin classini bu sekilde cevirir.

public class Isim {
public Isim(){
}
}

ama dilersen sen bu implicit(kapali) yontemi degilde acik acik (explicit) sekilde kendinde yazabilirsin. bu durumda java compiler derleme sirasinda default constructor olusturmaktan vazgececektir.

bir de bazi durumlarda mevcut constructor sana yeterli olmayabilir. ornegin yeni bir isim objesi olusturacaksin ama bu isim objesi bir rakam almak durumunda ve o rakamai gondermelisin.
new Isim(123); gibi.

yani sen Isim classini cagiracaksin ama constructror bir parametre alamali. bu durumda mevct constructor icin "overload" constructor yazmalisin. Ornegin;
public class Isim {
public Isim(){}
public Isim(int sayi){}
}

yani artik Isim sinifi iki tane constructor sahibi olmustur, overload yapilmistir. artik obje yaratirken ister new Isim(); istersen de new Isim(123) cagirarak obje olusturabilirsin.

yani overload yapsan da yapmasan da "new" anahtar kelimesine ihtiyacin var. dikkat et bu yontem "overload", genelde "override" ve "overload" birbirine karisitirilir, is gorusmelerinin populer sorusudur overload ve override farki.

Peki new anahter kelimesi ne gibi durumlarda kullanilmaz. Ornegin "Factory pattern" denilen bir sablon sekli vardir. bu bir static method yardimi ile bir obje doner. bu durumda static methodun oldugu sinifi new anahtar kelimesi ile cagirman gerekmez. Ornegin;

public class Isim {
public static Isim getIsim (){
return new Isim();
}
}

dikkat et burada bir static getIsim diye method var. bu bir method, constructor degil. ama bu method bir new anahtar kelimesi ile Isim objesi olusturup donuyor. eger boyle bir factory methodun var ise

Isim isim = Isim.getIsim();

seklinde hicbir new anahtar kelimesi kullanmadan objeyi alabilirsin, cunku static factory methdo o objeyi icindeki new ile olusturup sana donecektir. sana ise static sinifi cagirmak duser. static siniflar hicbir obje olusturmadan cagirilabilir, yani new anahtar kelimesine ihtiyac yoktur.

ozetle java object oriented bir dil oldugu icin bir obje olusturmak icin mutlaka bir yerde "new" anahtar kelimesi yazmak durumundasin. amam bu kullandigin paterne gore bir static factory method icinde bir defa yazarak da olur, ya da her bir obje olusturmak icin ayri ayri yazarak ta olur.
  • emrahday  (02.01.19 14:19:27 ~ 14:21:59) 
@emrahday

sayende gerçekten şimdi anladım galiba şöyle ki new operatörü ile sınıfın nesnesi oluşur bu şu demek
bu bellekte nereye kayıt edileceğini söyler.
constructor ise belleğe ne kaydedileceğini söyle ( String int vs.)
new operatörü ile nesne oluştuğunda constructor çağırır ve constructor'dakiler belleğe kaydedilir.

doğru mu anladım ?

teşekkür ediyorum gerçekten.
  • aristotelesin berberi  (02.01.19 15:43:20) 
evet aynen. biraz daha acayim;

class bir yemek kitabi tarifindeki yemek tarifi gibidir. yemegin nasil yapilacagini, icine neler konulacagini ve nasil hazilanacagini tanimlar. blueprint yani sablondur. o yemegi yaparken yani objeyi olustururken o objede ne olacak onu tanimlar.

constructor ise o tarifi ne katacaksin onu belirler. ornegin makarna tarfin (class makarna{}) olsun, simdi makarna yapacaksin ama neyli yapacaksin, iste o zaman constructor devreye girer. constructora bir malzeme katmayabilirsin (default constructor) ya da malzeme katabilirsin (makarna(string malzeme){}).

bir classdan obje uretmekde constructor yardimi ile olur. 'new' anahtari o class in constructorunu cagirmani saglar. ornegin makarna tarifini yazdin (class makarna), sonra o makarna tarifinde ister malzemeli ister malzemesiz constructor yazdin. artik makarna yapma vakti geldi.

Makarna sadeMakarna = new Makarna();

dediginde o makarna tarifini (class) default constructor ile calistirir ve makarnayi yapar. artik makarna hafizada yer kaplar. default oldugu icinde icine malzeme katmamisindir.

Makarna salcaliMakarna = new Makarna("salca");
Makarna peynirliMakarna = new Makarna("peynir");

ya da salcali ve peynirli malzemeli yapabilirsin, eger malzeme alan constructorun var ise. sade makarna icin java otomatik olusturur (default constructor). ama eger malzemeli yapacaksan senin tanimlaman gerekir (constructor overloading) elbette malzemeli makarna objesi hafizada biraz daha fazla yer kaplar. ve olusturdugun her bir obje yani sade, salcali ve peynirli makarna hafizada ayri ayri yer kaplar, yani birini degistirince digeri degismez, tamamen bagimsiz objelerdir ve ram uzerinde farkli hafiza bolumlerinde tutulur.
  • emrahday  (02.01.19 16:30:39 ~ 16:36:58) 
@emrahday

gerçekten çok açıklayıcı oldu artık tamamen anladım.
ben bu konuyu karıştırmamın sebebi class ismi ile oluşturulan constructor için de new operatörü ile oluşturulan default constructor içinde nesne oluşturur denmesiydi
ben de düşündüm ikisi de aynı işi yapıyor sa birini kullanmayalım dedim ve orada kafam karıştı
çok teşekkürler
bilginden ileri ki zamanlarda, ihtiyaç duyduğum da, uygun bulursan, ekşi sözlükten mesaj ile soru sorarak kullanmak isterim.
  • aristotelesin berberi  (03.01.19 06:53:07) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.