Umut Çakmak

Umut Çakmak

Java - Başlatma Sırası

Java - Başlatma Sırası

Umut Cakmak
·Jun 29, 2022·

Subscribe to my newsletter and never miss my upcoming articles

Arkadaşlar merhaba,

Bu yazıda sınıf üye'lerine (member field'lara) göz atacağız.

Bazen kod blokları bir method içindedir. Bunlar, method çağrıldığında çalıştırılır.

Diğer zamanlarda, kod blokları bir methodun dışında görünür.Bunlara instance initializers denir.

Fields ve instance initializer blokları, dosyada göründükleri sırayla çalıştırılır.

Instance initializers sayarken bunların bir method içinde olamayacaklarını unutmayın.

Şimdi bu alanlar üzerinde okuma ve yazma işlemlerine bakalım.

public class Person{
    int  age;
      public static void main(String[] args) {
        Person person  = new Person();
        person.age = 29; // set variable
        System.out.println(person.age);  // read variable
    }

}
public class Name {

    String first = "Umut";
    String last = "Çakmak";
    String full = first + last;

    public static void main(String[] args) {
        Name n = new Name();
        System.out.println(n.full);
    }
}

Başlatma Sırası

  • Fields and instance initializer blokları, dosyada göründükleri sırayla çalıştırılır.
  • Constructor tüm field'lar ve instance variable'lar çalıştırıldıktan sonra çalışır.
public class Chick {

      private String name = "Fluffy";

    {
        System.out.println(name + " : setting field"); //  instance initializer
    }

    public Chick() {
        name = "Tiny";
        System.out.println(name + " :setting constructor");

    }

 public static void main(String[] args) {
        Chick chick = new Chick();
        System.out.println(chick.name);

        // setting field
        //setting constructor
        //Tiny
    }

}

İlk adımda java main metod içerisinde kurucu çağrısını çağırarak Chick ile yeni bir nesne oluşturur. name alanına "Fluffy" olarak başlatır.

Ardından, println() komutunu çalıştırır. System.out.println(name + " : setting field") satırını çalıştırdıktan sonra tüm field'lar ve instance initializer'lar çalıştıktan sonra, Java constructor'a geri döner.

Daha sonra name alanını "Tiny" olarak değiştirir. Constructor'daki işlem tamamlandıktan sonra main method içerisindeki System.out.println(chick.name); satırına geri döner ve yazdırılır.

Başka bir örneğe daha bakalım.

public class Egg {

    public Egg(){
          number = 5;
  }

    public static void main(String[] args) {
          Egg egg = new Egg();
          System.out.println(egg.number);
   }

    private int number = 3;
    { number = 4; } 

}

Field'lar ve bloklar önce çalıştırılır, sayı 3'e ve ardından 4'e ayarlanır. Ardından yapıcı çalışır, sayıyı 5'e ayarlar.Sonuç 5'dir.

Geçeriz Tanımlama

Field'lar ve bloklar için sıralama önemlidir. Tanımlanmadan önce bir değişkeni kullanamazsınız.

{ System.out.println(name); } // DOES NOT COMPILE

private String name = "Fluffy";