Home > Java > Java’da Static Anahtar Kelimesi ve Kullanımı

Java’da Static Anahtar Kelimesi ve Kullanımı

Java öğrenmeye çalışanların kafasını karıştıran konulardan birisi de static değişkenler ve metotlardır. Aslında kullanım mantığı çok basit olan static anahtar kelimesi gereksiz yere birçok kişinin kafasını karıştırmaktadır. Bu yazıda Java dilinde static kelimesinin kullanım alanlarını çeşitli örnekler vererek alt başlıklar halinde inceleyeceğiz.

Sınıf ve Nesne Değişkenleri

Bildiğiniz gibi sınıflar içinde bulunan alanlar (değişkenler), o sınıftan yaratılan her nesne için ayrı ayrı oluşturulurlar. Yani ad, soyad ve yaş gibi 3 bilgi içeren bir sınıfımız varsa, bu sınıftan oluşturduğumuz her nesne için farklı farklı ad, soyad ve yaş değişkenleri bellekte oluşturulur. Bu yüzden bu tür değişkenlere nesneye özgü oldukları için “nesne değişkeni” denir. Bir sınıftan oluşturduğumuz her nesne için tanımlı olan nesne değişkenlerinin değerleri de o nesneye ait olacaktır. Ancak Java’da sadece nesneye ait değil, sınıfa ait değişkenler tanımlamak da mümkün. İşte tam burada “static” anahtar kelimesi devreye giriyor.

Static anahtar kelimesi kullanılarak oluşturulan değişkenler nesne değişkeni değil “sınıf değişkeni” olarak adlandırılırlar. Bu değişkenler nesneye ait değil, sınıfa ait bilgileri taşırlar. Sınıf değişkenleri içinde tanımlandığı sınıftan hiçbir nesne oluşturulmamış olsa bile bellekte yer kaplarlar. Nesne değişkenleri ise ancak bir nesne tanımlandığında bellekte yer kaplarlar. Bu iki tür değişkenin ayrıldığı bir başka nokta da sınıf değişkenlerinin sadece bir örneğinin olmasıdır. Yani o sınıftan kaç tane nesne oluşturulursa oluşturulsun, bellekte tek bir tane sınıf değişkeni vardır ve ne şekilde erişirsek erişelim, aynı sınıf değişkenine erişiriz. Şimdi bunları bir örnekle pekiştirelim.

package com.seckintozlu.makale;

public class Ogrenci {

	private String isim;			// Nesne degiskeni
	private int yas;             		// Nesne degiskeni
	private String ogrenciNo;		// Nesne degiskeni
	public static int ogrenciSayisi = 0;	// Sinif degiskeni
	
	public Ogrenci(String isim, int yas, String ogrenciNo) {
		
		this.isim = isim;
		this.yas = yas;
		this.ogrenciNo = ogrenciNo;
							
		// Her nesne yaratildiginda sinif degiskenini artiriyoruz.
		ogrenciSayisi++;	
	}
}

Burada 3 tane nesne değişkeni, 1 tane de sınıf değişkeni içeren bir sınıfımız var ve bu sınıfın her bir örneği oluşturulduğunda yapıcı (constructor) metot içerisinde sınıf değişkeninin değerinin artırıldığını görüyoruz. Şimdi aşağıdaki koda bakalım.

package com.seckintozlu.makale;

public class Program {
	
	public static void main(String args[]) {
		
		System.out.println("Baslangicta ogrenci sayisi: " + Ogrenci.ogrenciSayisi);
		
		// iki tane ogrenci nesnesi olusturuyoruz
		Ogrenci ogrenci1 = new Ogrenci("Obi-Wan Kenobi", 19, "2010001");
		Ogrenci ogrenci2 = new Ogrenci("Anakin Skywalker", 16, "2010002");
		
		int ogrSayi = Ogrenci.ogrenciSayisi;
		System.out.println("Ogrenci sayisi (Sinif uzerinden): " + ogrSayi);
		
		ogrSayi = ogrenci1.ogrenciSayisi;
		System.out.println("Ogrenci sayisi (Ilk nesne uzerinden): " + ogrSayi);
		
		ogrSayi = ogrenci2.ogrenciSayisi;
		System.out.println("Ogrenci sayisi (Ikinci nesne uzerinden): " + ogrSayi);
	}
}

Yukarıdaki kod çalıştırıldığında aşağıdaki sonucu üreteceketir.

Baslangicta ogrenci sayisi: 0
Ogrenci sayisi (Sınıf üzerinden): 2
Ogrenci sayisi (İlk nesne üzerinden): 2
Ogrenci sayisi (İkinci nesne üzerinden): 2

Koddan da göreceğiniz gibi static sınıf değişkenlerine hem sınıf adı ile, hem de o sınıftan yaratılmış nesne referansları ile erişmek mümkün. Ancak hangi yolla erişirsek erişelim, sınıf değişkeni tek bir tane olduğu için erişilen bellek alanı aynıdır. Henüz hiçbir nesne oluşturmamışken sınıf adı ile eriştiğimiz sınıf değişkenimiz ilk değeri olan 0’ı verecektir. Her bir nesne oluşturduğumuzda ise sınıf değişkenimiz bir artmaktadır. Sınıf değişkenleri bu örnekte olduğu gibi oluşturulan nesne sayısını tutmak için sıkça kullanılmaktadırlar. Örnekte 2 tane nesne oluşturup sınıf değişkenimizin değerini 2 yapmış oluyoruz. Daha sonra bu sınıf değişkenine hem sınıf adı ile, hem de nesne referansları ile erişip içeriğini yazdırıyoruz ve sonuçta bu 3 erişimde de aynı sonucu alıyoruz. Dikkat ederseniz static değişkeni artıran kod satırı nesneye özgü bir alan alan olan yapıcı metot içerisinde olmasına rağmen artırılan değişken sınıf değişkeni olduğu için yaptığımız değişiklik nesneden bağımsız olmaktadır.  Çünkü daha önce de belirttiğim gibi sınıf değişkenleri tek bir defa oluşturulur ve yapılan her türlü erişim bu tek değişkene yapılmış olur.

Static Metotlar

Şimdi ise static anahtar kelimesinin başka bir kullanım alanı olan static metotlara bakalım. Normal şartlarda bir sınıftaki bir metodu çalıştırmak istiyorsak, önce o sınıfı kullanarak bir nesne oluşturmalı, sonra bu nesne referansı üzerinden metodu çağırmalıyız. Ancak değişkenlerde olduğu gibi metotlar için de static kelimesini kullanarak nesnelerden bağımsız sınıf metotları yazabiliriz. Sınıf metotlarını çağırmak için o sınıftan bir nesne oluşturmamız gerekmez. Değişkenlere erişir gibi direk sınıf ismi ile bu metotları çağırmamız mümkündür. Şimdi aşağıdaki kodu inceleyelim.

package com.seckintozlu.makale;

public class Ogrenci {

	private String isim;           // Nesne degiskeni
	private int yas;                // Nesne degiskeni
	private String ogrenciNo;   // Nesne degiskeni
	private static int ogrenciSayisi = 0; // Sinif degiskeni
	
	public Ogrenci(String isim, int yas, String ogrenciNo) {
		
		this.isim = isim;
		this.yas = yas;
		this.ogrenciNo = ogrenciNo;
							
                // Her nesne yaratildiginda sinif degiskenini artiriyoruz.
		ogrenciSayisi++;	
	}
	
	public static int getOgrenciSayisi() {
		return ogrenciSayisi;
	}
}

Bu kodun ilk verdiğim Ogrenci sınıfından tek farkı eklenen yeni bir static metot. İlk örnekte public olarak belirttiğimiz sınıf değişkenimize direk ismiyle erişirken, bu sefer sınıf değişkenini private yapıp static bir metot üzerinden erişiyoruz.  Bu sınıfı test etmek için aşağıdaki kodu çalıştıracağız.

package com.seckintozlu.makale;

public class Program {
	
	public static void main(String args[]) {
		
		System.out.println("Baslangicta ogrenci sayisi: " + Ogrenci.getOgrenciSayisi());
		
		// iki tane ogrenci nesnesi olusturuyoruz
		Ogrenci ogrenci1 = new Ogrenci("Obi-Wan Kenobi", 19, "2010001");
		Ogrenci ogrenci2 = new Ogrenci("Anakin Skywalker", 16, "2010002");
		
		int ogrSayi = Ogrenci.getOgrenciSayisi();
		System.out.println("Ogrenci sayisi: " + ogrSayi);
		
	}
}

Bu kodun çıktısı aşağıdaki gibi olacaktır.

Baslangicta ogrenci sayisi: 0
Ogrenci sayisi: 2

çıktısını verecektir. Öğrenci sınıfının içindeki getOgrenciSayisi() metodu static olduğu için, bu sınıfın herhangi bir nesnesini oluşturmadan önce bu metodu çağırmamız mümkündür. Bu sınıftan herhangi bir nesne oluşturduysak, o nesne referansı üzerinden de tanımladığımız static metodu çağırabiliriz ancak bu kodun okunabilirliği açısından pek tavsiye edilmez. Aynı şekilde static değişkenlere erişirken de nesne referanslarını kullanabiliyoruz ancak bunlara da sınıf adı ile erişmek kodun okunabilirliğini artırmaktadır.

Static metotlarla ilgili bilinmesi gereken en önemli şey şudur: static metotlar içinden static olmayan bir sınıf öğesine erişemeyiz!! Eğer bizim static metodumuzun içerisindeki ogrenciSayisi değişkeni static olmasaydı program hata verecekti. Static bir metot içerisinde static olmayan değişkenlere erişemediğimiz gibi, static olmayan metotları da çağıramayız! Bu durumu şöyle örnekleyelim.

package com.seckintozlu.makale;

public class Ogrenci {

	private String isim;			// Nesne degiskeni
	private int yas;				// Nesne degiskeni
	private String ogrenciNo;		// Nesne degiskeni
	private static int ogrenciSayisi = 0;	// Sinif degiskeni
	
	public Ogrenci(String isim, int yas, String ogrenciNo) {
		
		this.isim = isim;
		this.yas = yas;
		this.ogrenciNo = ogrenciNo;
							
		// Her nesne yaratildiginda sinif degiskenini artiriyoruz.
		ogrenciSayisi++;	
	}
	
	public int ogrenciSayisiniBul() {
		return ogrenciSayisi;
	}
	
	public static int getOgrenciSayisi() {
		return ogrenciSayisiniBul();
	}
}

Öğrenci sınıfımıza static olmayan ogrenciSayisiniBul() isimli yeni bir metot ekledik. Bu metot sadece ogrenciSayisi isimli sınıf değişkenimizi döndürüyor. Buraya dikkat çünkü kuralımız şöyleydi: static metot içerisinden static olmayan bir öğeye erişemeyiz. Burada ise static olmayan bir metottan static bir öğeye erişiyoruz. Bu geçerli bir erişimdir. Ancak static metodumuz olan getOgrenciSayisi() metodu static olmayan ogrenciSayisiniBul() isimli metodu çağırıyor. Kuralımıza göre getOgrenciSayisi() static bir metot olduğu için static olmayan ogrenciSayisiniBul() metodunu çağıramaz. Yukarıdaki kodu derlemeye çalıştığımızda “Cannot make a static reference to the non-static method ogrenciSayisiniBul() from the type Ogrenci” hatası alırız ve kodumuz derlenmez. Aynı şekilde getOgrenciSayisi() metodu içerisinden static olmayan bir değişkene (örneğin isim) erişmeye çalışsaydık yine hata alacaktık.

Bunun sebebini şöyle açıklayabiliriz. Static değişkenler ve metotlar nesnelerden bağımsızdır. Yani ortada hiçbir nesne yokken static metotlar çağırılabilir veya static değişkenlere (sınıf değişkenleri) değer atanabilir. Static olmayan sınıf öğeleri ise ancak bir nesne tanımlandığında var olabilir. Bu durumda static bir metot içerisinde static olmayan bir değişkene erişilmeye çalışıldığında hangi nesnenin değişkenine erişilecektir? O anda ortada hiç nesne bile olmayabilir. Aynı durum static metot içerisinde static olmayan bir metot çağırılmaya çalışıldığında da geçerlidir. Bu sebeple static metotlar içerisinden ancak static olan sınıf öğelerine erişebiliriz. Ancak yukarıdaki örnekte yaptığımız gibi static olmayan bir metot içinden static öğelere erişebiliriz. Çünkü static öğeler nesne yaratılmadan daha önce zaten yaratılmıştı.

Static metot içerisinden static olmayan metodu çağıramayınca gidip diğer metodu da static yapmak o an için işe yarayabilir ancak bu son derece kötü bir çözüm yoludur. Hatta çözüm yolu bile değildir, kodu katletmektir. Böyle bir durumda metotlarınızın gerçekten static olup olmaması gerektiğini sorgulamak gerekir. Bu konuya yazının sonunda değineceğim. Şimdi diğer bir static kullanım olan static kod bloklarına göz atalım.

Static Kod Blokları

Static kod blokları static değişkenlere ilişkin ilk değer atamalarını yapmak için kullanılan kod bloklarıdır. Bunlara literatürde “static initializer” denmektedir. Static kod blokları sınıf değişkenleri belleğe yüklendikten hemen sonra işletilirler. JVM, o sınıfa ait bir nesne oluşturulmadan önce static kod bloklarının işletimini garanti eder.

package com.seckintozlu.makale;
import java.util.Random;

public class StaticInitializer {
	
	private static int dizi[];
	private static int boy = 10;
	
	static {
		
		dizi = new int[boy];
		Random rnd = new Random();
		
		for(int i=0; i < boy; i++)
			dizi[i] = rnd.nextInt(100);
	}	
}

Yukarıdaki koda baktığımızda static kod bloğu içerisinde 0 ile 99 arasında rastgele belirlenmiş 10 adet sayıdan oluşan bir dizi oluşturulduğunu görüyoruz. Bu kod bloğu sayesinde, bu sınıfın değişkeni olan dizi değişkeni yaratıldığı anda 10 tane rastgele sayı ile doldurulmaktadır. Static kod blokları içerisinde de, static metotlarda olduğu gibi static olmayan sınıf öğelerine erişmek mümkün değildir. Static kod blokları yaygın olarak kullanılmadığından daha fazla detaya inmeye gerek yok diye düşünüyorum.

Static Import

Static metotların sınıf adı kullanılarak çağırıldığını biliyoruz. Örneğin Java’da “java.lang” paketinde bulunan “Math” sınıfındaki tüm metotlar static metotlardır ve bunları çağırmak için Math.metotAdi() şeklinde bir kod yazmak gerekmektedir. Math sınıfındaki static metotları kodumuza import edip sınıf adını kullanmadan sadece metot adı ile static metotları çağırmak istiyorsak aşağıdaki gibi static import kullanabiliriz. Buradaki tek fark normalde kullandığımız import kelimesinin yanına bir de static eklemektir.

package com.seckintozlu.makale;

import static java.lang.Math.*;

public class Program {
	
	public static void main(String args[]) {
		
		System.out.println("Karekok 25: " + sqrt(25));
		System.out.println("Log(100): " + log(100));
		System.out.println("Pi Sayisi" + PI);
	}
}

Kodda görüldüğü gibi normalde Math.sqrt(), Math.PI yazarak erişmemiz gereken static metot ve değişkenlere static import kullanarak direk erişme sansına sahip olabiliyoruz.

Static Değişkenler Ne Zaman Kullanılmalı?

Ne zaman static değişkenlerin, ne zaman nesne değişkenlerinin kullanılması gerektiği özellikle Java programlamaya yeni başlamış olan kişiler için kafa karıştırıcı olabilir. Aslında aralarındaki fark çok açık ve net. Sınıf değişkenleri her bir nesne için ortak olan, sadece bir örneği bulunan, başka bir deyişle değeri nesneden nesneye değişmeyen, her nesne için aynı olan değişkenlerdir.  Nesne değişkenleri ise zaten adı üzerinde, değeri her nesne için farklı olması gereken değişkenlerdir. Yazının başında vermiş olduğumuz örnekte isim, öğrenci numarası gibi değişkenlerin her birinin her öğrenci nesnesi için farklı olması gerektiği çok açıktır.

Öte yandan öğrenci sayısı değişkeni toplamda yaratılmış öğrenci nesnelerinin sayısını tuttuğu için, tek bir değeri olması gerekmektedir. Yani sınıf değişkeni (static) olması gerekmektedir. Öğrenci sayısı değişkenini nesne değişkeni olarak da tutabiliriz ancak her bir nesne ayrı bir kopya tutacağı için bu değer her değiştiğinde bütün nesneleri gezip her birinde de bu değeri güncellememiz gerekir. Bu da çok anlamsız ve verimsiz bir çözüm olur.

Static Metotlar Ne Zaman Kullanılmalı?

Tanımladığımız metotların sınıf metodu mu yoksa nesne metodu mu olması gerektiği daha zor cevaplanabilecek bir sorudur. Bildiğiniz gibi nesne temelli programlama dillerinde nesnelerin durumları ve davranışları vardır. Tanımladığımız değişkenler (alanlar) nesnelerin durumunu belirlerken, metotlarımız ise davranışları temsil eder. Eğer bir davranış (metot) çalışabilmek için o nesnenin durumuna bağımlı ise ya da o nesnenin o anki durumundan etkileniyorsa, o metod bir nesne metodu olmalıdır. Ancak bir davranışın gerçekleştirmesi o nesnenin durumundan tamamen bağımsız ise, diğer bir deyişle nesnenin o anki durumu metodun üreteceği sonuca etki etmeyecekse, o metod static olmalıdır.

Örnek verecek olursak java.lang.Math sınıfı içerisindeki tüm metotlar sınıf metotlarıdır. Bir sayının karekökünü almak için o sayıyı bir metoda parametre olarak geçmek yeterlidir. Math sınıfından yaratılacak bir nesnenin o anki durumunun karekök alan sqrt() metodu ile hiçbir ilgisi yoktur. O zaman karekök hesaplama için Math sınıfından bir nesne yaratmaya da gerek yoktur. Bu sebeple bu metotlar static olarak tanımlanmıştır. Program geliştirirken nesnenin durumundan bu kadar bağımsız örnekler bulmak zor olabilir. Ancak aradaki farkı kavradığınız zaman bir metodun static olup olmaması gerektiğine kolaylıkla karar verebilirsiniz.

Son Not: public static void main(String args[])

Java’da main metodunun imzası sabittir. Main metodu public ve static olmak zorundadır. Bu metodun public olması gerektmektedir çünkü kodumuzu çalıştıran JVM’nin dışarıdan main metodunu çalıştırabilmesi gerekir. Bu metodun ayrıca static de olması gerekir çünkü JVM kodumuzu çalıştırırken main metodunun yazılı olduğu sınıftan bir nesne oluşturmaz. Ortada nesne yokken bir metodu çalıştırmak için de o metodun static olarak tanımlanmış olması gerekir.

  1. elif
    Ekim 8th, 2010 at 12:44 | #1

    Java’da static kelimesinin kullanımını bu kadar anlaşılır bir şekilde açıklayan başka bir kaynağa rastlamamıştım. Ellerinize sağlık…

  2. Kasım 7th, 2010 at 15:14 | #2

    Teşekkürler, gayet güzel ve anlaşılır bir makale olmuş.

  3. Kadir Tetik
    Aralık 20th, 2010 at 17:03 | #3

    Tesekkuler emeginiz icin ama anlatimi daha anlasilir yapmak amaciyla bazi yerler koyu renk veya baska renkte yazilmali bence, birde yaziyi jpg formatinda yaparsaniz ok işaretleri kullanip bazi yerleri daire icine alip şematik gosterimle cok daha anlasilir hale getirilebilirsiniz. Ayrica static methodlarin kullanimini daha somut bir program ornegi ile anlatirsaniz daha iyi olur diye dusunuyorum.

  4. taha
    Ocak 28th, 2011 at 00:10 | #4

    teşekkür ederim sonunda anladım sınıf değişkenleri ile nesne değişkenleri arasındaki farkı

  5. selim
    Nisan 22nd, 2011 at 02:22 | #5

    tam anlamıyla kaliteli bir anlatım olmuş teşekkür ediyorum…

  6. ümit
    Nisan 25th, 2011 at 20:46 | #6

    çok başarılı bir anlatım gerçekten. beğendim.

  7. Mayıs 14th, 2011 at 10:14 | #7

    Teşekkürler gayet açıklayıcı olmuş

  8. Tetik
    Haziran 9th, 2011 at 14:23 | #8

    Kadir Tetik arakadaşım saçmalamşıssın, adam yazmış işte niye jpe çevirsin.
    Etrafta bu şekilde kaç tane site gördün ??

  9. java
    Haziran 13th, 2011 at 17:16 | #9

    Duru ve başarılı bir anlatım, tebrikler.

  10. melih
    Ocak 21st, 2012 at 13:36 | #10

    bu kadar anlatabilir örneklerle degerlerle tek tek helal olsun verdiğiniz emeğe

  11. Fikret
    Ocak 30th, 2012 at 14:53 | #11

    Gerçek çok temiz açık ve kaliteli bir makale tebrikler.

  12. Ocak 31st, 2012 at 00:22 | #12

    Teşekkürler, çok açıklayıcı bir makale olmuş

  13. ismail
    Mart 24th, 2012 at 21:14 | #13

    Helal olsun usta ellerine sağlık gerçekten çok anlaşılır olmuş, çok teşekkürler..

  14. a
    Mayıs 29th, 2012 at 06:11 | #14

    Helal be kardes guzel olmus.

  15. Yener
    Haziran 5th, 2012 at 02:27 | #15

    Gercekten cok anlaşılır bir dille acıklamışsınız herşeyi hocam cok teşekkurler

  16. olcay
    Ağustos 8th, 2012 at 16:20 | #16

    Emeğine sağlık

  17. faik
    Kasım 14th, 2012 at 00:54 | #17

    Okuduğum tüm kaynaklardan daha yalın ve açıklayıcı olmuş. Elinize sağlık.

  18. zeynep
    Kasım 26th, 2012 at 13:47 | #18

    çok açıklayıcı olmuş emeğine sağlık

  19. Ömer
    Aralık 27th, 2012 at 15:34 | #19

    Çok teşekkürler, hocam. Azeri türkü olmama rağmen türkçesin bu kadar güzel yazdığınızdan daha iyi anladım. İngiliscem de var, ama bu kadar değerli bir makale ingilisce bulmam zor. Çox siteler gezdim, ama buradan okuduğum kadar net bir anlatım görmedim. Teşekkür etmeyi kendime borç bilirim. Teşekkürler.

  20. alikiran baskesen
    Ocak 31st, 2013 at 14:24 | #20

    Çok temiz, kısa ve öz anlatım.
    Paylaşmaya devam edersiniz umarım.

  21. Selman
    Mart 27th, 2013 at 00:31 | #21

    Sade, anlaşılır bir anlatim. Eline sağlık dostum

  22. ÜVEYS-İ CAN
    Nisan 3rd, 2013 at 09:13 | #22

    hocam ellerinize sağlık çok güzel olmuş.

  23. Erkan DURAN
    Nisan 24th, 2013 at 12:01 | #23

    Allah razı olsun. 10 numara döküman..

  24. Aspen Morningstar
    Mayıs 2nd, 2013 at 21:59 | #24

    Şu an yurtdışında yüksek lisans aşamasında biri olarak elinizden öpüyorum saygılar…

  25. hasan
    Mayıs 26th, 2013 at 02:43 | #25

    çok güzel, emeğinize sağlık…

  26. mert
    Mayıs 31st, 2013 at 15:08 | #26

    Static metot içerisinden static olmayan metodu çağıramayınca gidip diğer metodu da static yapmak o an için işe yarayabilir ancak bu son derece kötü bir çözüm yoludur. Hatta çözüm yolu bile değildir, kodu katletmektir. Böyle bir durumda metotlarınızın gerçekten static olup olmaması gerektiğini sorgulamak gerekir. Bu konuya yazının sonunda değineceğim.

    Demişsiniz, merakla yazının sonunu bekledim ama malesef bu sıkıntıya çözüm yazmamışsınız.

    • Mayıs 31st, 2013 at 18:48 | #27

      Yorumun icin tesekkurler. Yazinin sonlarinda “Static Metotlar Ne Zaman Kullanılmalı?” basliginda aciklamaya calistim. Bir metod static olmali mi olmamali mi onun kararini vermek icin buraya bakabilirsin.

  27. murat
    Haziran 26th, 2013 at 16:15 | #28

    anlaşılır ve ayrıntılı bir anlatım olmuş eline sağlık

  28. erkan
    Eylül 16th, 2013 at 15:40 | #29

    Gerçekten çok güzel bir yazı olmuş. Ellerinize sağlık.

  29. fiseyin
    Eylül 23rd, 2013 at 23:01 | #30

    emeğine sağlık ama ben pek anlayamadım.çünkü detaylara aşırı takılıyorum ve kimsenin aklına gelmeyecek yerleri anlamıyorum.

  30. Ekim 6th, 2013 at 11:20 | #31

    Son konuya kadar hersey guzel.main metodunun neden static olmasi gerektigi tam dogru aciklanmamis. main metodunun yazılı olduğu sınıftan bir nesne oluşturmaz-ifadesi static class konu basligini gerektiriyor, oysa yazida bu konuya deginilmemis. Emege saygi icin tebrik ederim.

  31. Emrah Özen
    Ekim 20th, 2013 at 20:57 | #32

    Static anahtar kelimesini anlaşılır bir şekilde aktardığınız için teşekkürler. Gerçekten faydalı bilgiler.

  32. Kasım 12th, 2013 at 00:56 | #33

    emeğinize sağlık çok yalın ve açıklayıcı bir çalışma olmuş.

  33. mukaddes
    Aralık 11th, 2013 at 01:27 | #34

    ‘static’ anahtar kelimesi hakkında kitap yazmayı düşündünüz mü hiç:) gerçekten çok ayrıntılı, güzel bir anlatım olmuş:)

  34. Alihaydar
    Nisan 6th, 2014 at 20:05 | #35

    Mükemmel izah.Teşekkür ederim.

  35. Aylak Kadın
    Mayıs 5th, 2014 at 13:38 | #36

    Beynine sağlık, faydanlandım

  36. orhan
    Kasım 12th, 2014 at 16:55 | #37

    Allah ebeden razı olsun. harika anlatmışsınız.
    Bir isteğim var seçkin bey, şuan en populer dil java, temelden java ile ilgili bir kitap hazıylayıp bizlere sunsanız çok memnun oluruz.

  37. zlfkr
    Kasım 17th, 2014 at 23:20 | #38

    Allah razı olsun, emeğinize sağlık.

  38. ali
    Kasım 21st, 2014 at 11:34 | #39

    Hocam çok teşekkürler. Yabancı dilde açıklanan kaynaklardan çok daha iyi. Gerçekten eline sağlık

  39. ali
    Ocak 28th, 2015 at 15:53 | #40

    Güzel açıklama. Elinize sağlık.

  40. Şubat 6th, 2015 at 00:23 | #41

    hocam çok teşekkürler ,detajlı-anlaşılır bir yazı olmuş…

  41. hilal gungor
    Mart 16th, 2015 at 12:12 | #42

    eline saglık

  42. TheCoder
    Haziran 2nd, 2015 at 23:20 | #43

    Elinize sağlık kapsamlı bir anlatım olmuş.

  43. güven
    Temmuz 7th, 2015 at 12:58 | #44

    tesekkürler

  44. Ömercan
    Temmuz 23rd, 2015 at 11:51 | #45

    Teşekkürler. Çok güzel ve yararlı bir anlatım olmuş.

  45. Müjdat Akbal
    Ekim 15th, 2015 at 22:44 | #46

    Teşekkür ederim, az ve öz çok güzel açıklamışsınız

  46. Samil
    Kasım 9th, 2015 at 17:58 | #47

    Teşekkürler,emeğinize sağlık.

  47. Ender
    Kasım 10th, 2015 at 13:50 | #48

    Harika anlatım ve makaleler için çok teşekkürler

  48. Turan
    Ocak 2nd, 2016 at 01:13 | #49

    Teşekkürler gayet açıklayıcı olmuş. Allah razı olsun hocam.

  49. cansu
    Mart 3rd, 2016 at 18:25 | #50

    mükemmel olmuş. teşekkürler

  50. Onur Işık
    Mayıs 22nd, 2016 at 13:25 | #51

    İlk defa yazılım konusunu bu kadar açık ve net anlatabilen birisini gördüm.Eline emeğine sağlık

  51. Temmuz 10th, 2016 at 20:29 | #52

    Harika ,anlaşılır ve gayet detaylı. Teşekkürler 🙂

  52. Temmuz 26th, 2016 at 23:17 | #53

    Çok yararlı bir anlatım olmuş,emeğinize sağlık.

  53. esra
    Ağustos 15th, 2016 at 17:25 | #54

    gercekten güzel bi anlatım tam olarak anladığım tek kaynak.

  54. ergün
    Ekim 22nd, 2016 at 12:45 | #55

    gercekten cok iyi anlatılmıs cok isime yaradı

  55. Elif Nur
    Kasım 25th, 2016 at 15:47 | #56

    Harika bir anlatim.Emeklerinize saglik.Youtube dan kanal acarsaniz abone olurum.

  56. emine
    Aralık 25th, 2016 at 13:37 | #57

    Şu zamana kadar bir çok blogdan farklı konularda faydalanmışımdır. Ama sanırım ilk defa yorum yapma isteği hasıl oldu. Müthiş bir anlatım. Çok teşekkürler.

  57. Evren
    Ocak 8th, 2017 at 00:19 | #58

    Elimde slayt vardı. Çok karışık geldi ve 2-3 defa okumama rağmen anlamadım. Bu anlatım ise çok güzel olmuş gerçekten elinize sağlık. Özellikle en başta öğrenci isim yaş ve öğrenci sayısıyla ilgili verdiğiniz örnek tam oturmuş. Teşekkürler.

  1. Ekim 20th, 2012 at 12:24 | #1
  2. Haziran 30th, 2013 at 00:21 | #2

Please leave these two fields as-is:

Protected by Invisible Defender. Showed 403 to 641.622 bad guys.

%d blogcu bunu beğendi: