4 Temmuz 2015 Cumartesi

Static Anahtar Kelimesi

        Sınıfların içinde bulunan değişkenler her yeni nesne için tekrar tekrar oluşturulur . Buna nesne değişkeni denir . Fakat bazı durumlarda nesneler için değil de sınıf için genel değişkenler tanımlanması gerekir ki bu da static anahtar kelimesi ile mümkündür . Daha açık anlatmak gerekirse ;

Aşağıdaki gibi bir nesne sınıfınız varsa ve sürekli instance alarak yeni nesne üretiyorsanız ve her nesne için id numarasının bir artmasını istiyorsanız bunun için id değerini static yapmanız gerekiyor . Çünkü oluşturulan her nesne için ayrı bir id değişkeni oluşturmak yerine o sınıfa ait bir değişken oluşturulmuştur .


public final class Nesne {

 public static  int id = 0;
 
 public Nesne() {
  id++;
 }
 
}
public class Main {

 public static void main(String[] args) {

  Nesne nesne1 = new Nesne();
  System.out.println(nesne1.id);
  
  Nesne nesne2 = new Nesne();
  System.out.println(nesne2.id);
  
  
 }
}
Sonuç : 1
        2

Static kullanılmasaydı her seferinde değer 0 dan başlayacak ve 1 olacaktı -yani sürekli başa saracaktı-. Ek olarak bu nesne değişkenine direk "Nesne.id" ile de ulaşabilirsiniz . Herhangi bir instance almaya gerek duymadan .



public class Main {

 public static void main(String[] args) {

  Nesne nesne1 = new Nesne();
  System.out.println(nesne1.id);
  
  Nesne nesne2 = new Nesne();
  System.out.println(nesne2.id);
  
  Nesne.id = 10;
  System.out.println(nesne2.id);
 }
}
Sonuç : 1
        2
        10

Static methodlarda aynı şekilde instance almadan direk sınıfı adı üzerinden ulaşılabilir kullanım açısından static değişkenle arasında bir fark bulunmaz -nesneden bağımsız method oluşturmak -. Tek dikkat edilmesi gereken static methodlar içinde de static değişkenler kullanılması gerekmektedir .

Farklı bir static anahtar kelimesi kullanımı ise "static kod bloklarıdır" . Genellikle oluşturulan static değişkenlere ilk değerlerini atamak için kullanılırlar ve bu static blokları  nesne oluşturulmadan hemen önce çalışır .

public final class Nesne {

 public static int id = 0;
 
 public Nesne() {
  System.out.println("constructor");
  id++;
 }
 
 static
 {
  System.out.println("static blok");
  id=10;
 }
}
public class Main {

 public static void main(String[] args) {

  System.out.println("main");
  
  Nesne nesne1 = new Nesne();
  System.out.println(nesne1.id);
  
  Nesne nesne2 = new Nesne();
  System.out.println(nesne2.id);
  
  Nesne.id = 10;
  System.out.println(nesne2.id);
 }
}
Sonuç : main
static blok
constructor
11
constructor
12
10
Kısacası bir sınıf için genel bir değişken oluşturulmak istendiğinde static anahtar kelimesi kullanılmalıdır . Son olarak bir statik sınıftan sadece static değer ve methodlara erişilebilir . Aksi halde instance alınması gerekmektedir .

Dipnot : public static void main() in static olmasının nedeni kodun JVM e ilk yüklenme anında ortada herhangi bir nesne olmaması ve nesne yaratmadan methodun kullanılmasının tek yolunun static olarak tanımlanmasıdır .

0 yorum:

Yorum Gönder