Yapılandırıcı Çağırma Sırası

CorsaiR

Emektar
27 Ara 2005
1,228
18
Çekirdekten
Constructor (yapılandırıcı) çağırma sırası , işin içine inheritance (kalıtım) ve polimorfizm girdikten sonra epey karmaşık bir hal almaktadır . Constructor (yapılandırıcı) çağırma sırası , işin içine inheritance (kalıtım) ve polimorfizm girdikten sonra epey karmaşık bir hal almaktadır . Türemiş class ın yapılandırıcı metodunun çağırmadan evvel ana class ın tüm değişkenlerinin ilk değerlerini aldığından emin olmak gerekir aksi takdirde türemiş class da sorunlarla karşılaşabiliriz . Bu mantıkla yola çıkarsak , ana class ın yapılandırıcı metodu her zaman türemiş class ın yapılandırıcı methodundan daha önce çağrılır diyebiliriz. Eğer ana class ın argument alan bir yapılandıcı methodu varsa o zaman türemiş class ın yapılandırıcı methodunun ilk satırında super anahtar kelimesi ile ana class ın yapılandırıcı methodunu çağırmanız gerekmektedir.

Örnek :


// ilk deger verme sirasi
class A
{
static String degisken_bir = A.prt("static");
String degisken_iki = A.prt("non-static");
public A(int x) {
System.out.println("A constructor() " + x) ;
}

static String prt(String mesaj ) {
System.out.println("aaaaaa = " + mesaj);
return "a" ;
}
}

class B extends A
{
static String degisken_bir = B.prt("static");
String degisken_iki = B.prt("non-static");
public B() {
super(5) ;
System.out.println("B constructor()");
}

static String prt(String mesaj ) {
System.out.println("bbbbbb = " + mesaj);
return "a" ;
}
}
public class Extends
{
public static **** main(String[] args) {
new B();
}
}//^

ilk olarak new B() ile B objesi oluşturulduğu anda olaylar zincirleme olarak şöyle gelişir :

ilk etapda static olan değişkenlere ilk değerleri verilir . ilk olarak A class ındaki static değişken değer alır daha sonra B class ındaki static değişken değer alır .

Örneğin eğer A class ıda H class ından türeseydi ve H class ında da static bir değişken olsaydı o zaman ilk önce H class ındaki static değişkene değeri verilecekti daha sonra A class sındaki static değişkene değeri verilecekti ve son olarak da B class ındaki static değişkene değeri verilirdi . Kısaca static değişkenlere değer verme (initialize) sırası en üsteki class dan başlayarak en aşagıya doğru devam eder .

Daha sonra static-olmayan değişkenlerin ilk değer alma töreni başlar . Bu örnekte en tepede olan A class ına gelinir ve A class ının yapılandırıcı methoduna girilmeden , static-olmayan değişkenelere ilk değerleri verilir , sonra A class nın yapılandırıcı methoduna girilir .Fakat A class ının yapılandırıcı metodu nun argument aldığı görülür (default constructor değil ) ve B class ının yapılandırıcı methodunun ilk satırı dikkate alınarak A objesi oluştrulur ( super(5) ). Nihayet sira B class ının static-olmayan değişkenlerinin ilk değer almasına gelir .Bu işlemde tamamlandıkdan sonra B class ının yapılandırıcı metodunun içine girilir .

Programın çıktısı :

aaaaaa = static
bbbbbb = static
aaaaaa = non-static
A constructor() 5
bbbbbb = non-static
B constructor()
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.