31/07/2015 8

Java ile Static İfadesi Kullanımı

Statik ifadeler sadece bir yerde çalışır ve sadece bir kere çalışır.İşin en basit hali bu.Static bir değişken herhangi bir class yapısına bağlı değildir. Bellekte tek biryerde tutulur.

Static metodların çalışma durumlarıyla aynıdır. Static olan verileri yönetirler. Ve aynı zamanda girdi noktaları olarak kullanılırlar. Fakat onları normal metodların içinde çağırabiliriz.

Alan ve Metod : Aşağıda örneğini yapacağımız programda iki tane alan bulunmaktadır. Int tipinde sayac adında static bir alan ve main adında girdi noktası şeklinde bir fonksiyon bulunur bu fonksiyon programın akışını kontrol eder. Main fonksiyonu, sayac ifadesine static ifadesini kullandığı için erişebilir...

Hadi şimdi bunlarla ilgili örneğimize geçelim...  

public class Program {

    static int sayac; //sayac adındaki değişkenimi static ifadesi ile oluşturdum

    public static void main(String[] args) {

	// Sayacımı arttır komutu
	Program.sayac++;
	System.out.println(Program.sayac);

	// arttırmayı tekrarlıyorum
	// ... bellek temizlenmediği için aynısının üzerinden sayar
	Program.sayac++;
	System.out.println(Program.sayac);
    }
}
 
Program Çıktısı

1
2

Bellek Bölgeleri: Static ifadeler bellekte tek bir alan kullanır. Biz sayacı arttırdığımızda o aynı alanda tutulur. Yani tekrar kullanılmak üzere sıfırlanmaz veya silinmez. Bu cümle braz karışık gelebilir fakat bu çalışma mantığı işlemcinin bellekleme mantığına göre çalışmaktadır. Bu yüzden anlattığım şekilde çalışır.

Not: Static ifadeler consolda daha çok kullanılır. System.out.println("deneme"); metodu ile consol ekranına bişeyler yazdırabiliriz.

Static ifadeler ve normal ifadeler:Programın üzerinde düşünelim. Static ve static olmayan ikitane class yapısına sahip. Static olanı Program.size şeklinde çağırıyoruz.

Fakat kodların çalışması için ilk olarak oluşturulması gerekir yani en üste yazılası gerekmektedir. Bu tipsel değil kullanımdır. Şimdi Bunlar ile ilgili bir uygulama yapalım

 

public class Program {

    static int boyut = 100;
    int kod = 1000;

    public static void main(String[] args) {

	//Static değişkeni direk olarak Program ile çağırıyorsun
	System.out.println(Program.boyut);

	// Normal değişkeni programın tipiyle çağırıyorsun
	Program p = new Program();
	System.out.println(p.kod);
    }
}
  Program Çıktısı

100
1000

Final ve static karşılaştırması : Final tipindeki bir alan program içinde değiştirilemez. Static alan değiştirilebilir. Eğer final tipindeki bir değişikeni değiştirmeyi denerseniz program hata verecektir.

Final: Const veri tipiyle aynıdır. İkisindede tanımlanan değişken sabittir yani değiştirilemez. Static:Tek bir yerlik anlamına gelir. Programda değiştiriliebilir.

Şimdi Bununla ilgili bir örnek yapalım  

public class Program {

    static int dgskn1 = 5;
    final int dgskn2 = 100;

    public static void main(String[] args) {
	dgskn1 ++; // bu doğru kullanım
	dgskn2 ++; // Program burda hata verecektir.
    }
}
  Program Çıktısı

Exception in thread "main" java.lang.Error:
    Unresolved compilation problem:
    Cannot make a static reference to the non-static field _code
Burda final değişkenini değiştirmeye çalışıyorsunuz diyor ve o değişmez diyede ekliyor

Static Metod Performansı: Derleyiciler programın kullanacağı argument nesnelerini kendiliğinden oluştururlar Bunların çalışma sürelerini bir zamanlayalım ve performans farklarını görelim...

Sonuç olarak static değişkenler daha hızlı yanıt verdi. Normal değişkenlerin yaptığı bazı işlemleri yapmadığı için daha hızlı ve basitçe döner Şimdi performans ile ilgili uygulamaya geçelim


 
public class Program {

    int normalDegisken(int a) {
	// Normal bir değişkeni çağırma metodu
	return a * 2;
    }

    static int staticDegisken(int a) {
	// Burdada static değişkeni çağıran metod
	return a * 2;
    }

    public static void main(String[] args) throws Exception {
	Program p = new Program();

	long t1 = System.currentTimeMillis();

	// ... Normal mdegiskenli metodu cağırıyoruz
	for (int x = 0; x < 100; x++) {
	    for (int i = 0; i < 10000000; i++) {
		if (p.normalDegisken(i) < 0) {
		    throw new Exception();
		}
	    }
	}

	long t2 = System.currentTimeMillis();

	// ... Burdada static değişkenli metodu çağırıyruz
	for (int x = 0; x < 100; x++) {
	    for (int i = 0; i < 10000000; i++) {
		if (Program.staticDegisken(i) < 0) {
		    throw new Exception();
		}
	    }
	}

	long t3 = System.currentTimeMillis();

	// ... EN son aradaki farklarıda ekrana yazdıralım
	System.out.println(t2 - t1);
	System.out.println(t3 - t2);
    }
}
  Program Çıktısı

955 ms, normal değişkenin çağrıldığı fonksiyon
880 ms, static değişkenin çağrıldığı fonksiyon

Burak Hamdi Tufan

İyi Çalışmalar


Tags

Share this Post



Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment.

Comments

    There is no comment. Be the owner of first comment...