java’da statik metot ve değişkenler
Herkese merhabalar,
Bugünkü yazımızda Statik Değişkenleri ve Yöntemleri inceleceğiz.
Statik modifier(değiştirici), bir yöntemin veya değişkenin davranışı farklı olduğundan tamamen ayrı bir kavram olarak ele alıcağız. Statik bir üyenin çalışma şeklini anlamak için,bir örnek verelim.
Belirli bir class(sınıf)tan başlatılan tüm örneklerin(new) çalışan bir sayısını tutmak istediğinizi varsayalım. Bu değişkeni gerçekte nerede(heap,stack) tutuğumuz önemli? Örneklerini izlediğiniz sınıf içinde bir örnek değişkeni(new class) olarak tutmak işe yaramaz, çünkü sayı her yeni örnekle birlikte varsayılan bir değere sıfırlanır.Birden fazla sınıf içinden bir değişken ile toplam sayıya ulaşmanın yolu statik değiştiriciyi kullanmaktır.
Statik olarak işaretlenen değişkenler ve yöntemler, herhangi bir özel örneğe(new class) değil, sınıfa aittir. Aslında, o sınıfın hiçbir örneğine sahip olmadan statik bir yöntem veya değişken kullanabilirsiniz.
Statik bir yöntemi çağırabilmek veya statik bir değişkene erişebilmek için yalnızca sınıfın kullanılabilir olması gerekir. statik değişkenlere de bir sınıf örneğine sahip olmadan erişilebilir. Ancak, örnekler varsa, bir sınıfın statik değişkeni, o sınıfın tüm örnekleri tarafından paylaşılacaktır.
Statik sayac örneği verelim.
class Koyun {
static int koyunSayac = 0;
// ilk degeri sabitledik.statik degiken
public Koyun() {
koyunSayac += 1; // constructorda artırıyoruz.
}
public static void main (String [] args) {
new Koyun();
new Koyun();
new Koyun();
System.out.println(“ Koyun sayısı “ + koyunSayac);
}
}
yukarıdaki kodda, Koyun sınıfı herhangi bir Koyun örneği oluşturulmadan önce JVM tarafından ilk kez yüklendiğinde statik koyunSayac değişkeni sıfıra ayarlanır! (Bu arada, aslında bir statik değişkeni sıfıra başlatmanız gerekmez; statik değişkenler, örnek değişkenlerinin aldığı aynı varsayılan değerleri alır.) Bir Koyun örneği oluşturulduğunda, Koyun constructor yapıcısı, statik koyunSayac değişkenini çalıştırır ve artırır. Bu kod yürütüldüğünde, main() içinde üç Koyun örneği oluşturulur ve sonuç şöyle olur.
Koyun sayısı 3
koyunSayac statik olmadığını düşünelim.
class Koyun {
int koyunSayac = 0;
// tanımlanaıp ilk deger atanır.
public Koyun() {
koyunSayac += 1; // constructorda sayac artırılır.
}
public static void main (String [] args) {
new Koyun();
new Koyun();
new Koyun();
System.out.println(“ Koyun sayısı” + koyunSayac);
}
}
Bu kod çalıştırıldığında , yine de main() içinde üç Koyun örneği oluşturmalıdır, ancak sonuçta bir derleyici hatasıdır! Bırakın çalıştırmayı, bu kodun derlenmesini sağlayamayız.
Koyun.java:11: nonstatic variable koyunSayac cannot be referenced
from a static context
System.out.println(“Koyun sayısı “ + koyunSayac);
^
1 error
JVM, hangi Koyun nesnesinin koyunSayac’a erişmeye çalıştığınızı bilmiyor.
Sorun, main()’in kendisinin statik bir yöntem olması ve bu nedenle, yalnızca sınıfın kendisinde değil, sınıfın belirli bir örneğine karşı çalıştırılmamasıdır.
Statik bir yöntem, statik olmayan (örnek) bir değişkene erişemez, çünkü örnek yoktur!Statik yöntemin koyunSayac hakkında hiçbir şey bilmediği anlamına gelir.
Aynısı örnek yöntemleri için de geçerlidir; statik bir yöntem, statik olmayan bir yöntemi doğrudan çağıramaz.
Statik Yöntemlere ve Değişkenlere Erişim
Statik bir yöntemi çağırmak veya statik bir değişkene erişmek için bir örneğe ihtiyacınız olmadığından, statik bir üyeyi nasıl çağırır veya kullanırsınız? Sözdizimi nedir? Normal bir eski örnek yöntemiyle, bir örneğe başvuruda nokta operatörünü kullandığınızı biliyoruz.
Statik olmayan değiken örneğine bakalım.
class Koyun {
int koyunSayac = 0;
public int getKoyunSayac) {
return koyunSayac;
}
public Koyun(int s) {
koyunSayac = s;
}
public static void main (String [] args) {
Koyun k= new Koyun(25);
System.out.println(k.getKoyunSayac ()); //metotdan erişim
}
}
yukarıdaki kodda, bir Koyun örneğini oluşturup, k referans değişkenine atadık ve ardından az önce yarattığımız Koyun örneğinde bir yöntemi çağırmak için bu k referansını kullanıyoruz.Başka bir deyişle, heap üzerindeki belirli bir Koyun nesnesinde getKoyunSayac() yöntemi çağırıyoruz.
class Koyun {
static int koyunSayac = 0;
public Koyun() {
koyunSayac += 1;
}
// statik degisken oluşturduk ve ilk deger ataik
// contructurda değerini artırıyoruz.
}
class TestKoyun {
public static void main (String [] args) {
new Koyun();
new Koyun();
new Koyun();
System.out.print(“koyunSayac:”+Koyun .koyunSayac ); //erişimim statik
}
}
statik metotlarda erişim kuralları

Son olarak, statik yöntemlerin overriden olamazlar! Bu, bir alt sınıfta yeniden tanımlanamayacakları anlamına gelmez, ancak yeniden tanımlama ve geçersiz kılma aynı şey değildir.örnek verecek olursak
class Hayvan {
static void yuru() {
System.out.print(“a “);
}
}
class Koyun extends Hayvan {
static void yuru() {
//yeniden tanımlama overriden değildir.
System.out.print(“d “);
}
public static void main(String [] args) {
Hayvan [] h = {new Hayvan(), new Koyun(), new Hayvan()};
for(int x = 0; x < a.length; x++)
h[x].doStuff();
// statik netod cağırdık.
}
}
Yazımızdaki Kodlar ve daha fazlası sitemizde yeralmaktadır. http://latestsoftwaredevelopers.com/
Bu yazımızın da sonuna geldik, Statik Değişkenler ve Yöntemleri konusunu inceledik. Umarız faydalı bir yazı olmuştur .Takip etmeyi unutmayın:)