16 Aralık 2014 Salı

Static Değişken ve Metodlar

S.a. Arkadaşlar,
Bugünkü yazımızda static değişken ve metorları incelemeye çalışacağız. Nedir peki bu static olma konusu, bir sınıfta çağırılıp her yerde erişilebilen değişkenlerdir. Tek bir kopyası vardır ve her yerde o kopya üzerinde işlem yapılır. Örneğin elimizde farklı sınıflardan erişmek istediğimiz bir değişkenimiz olsun. Bunu nasıl kullanabiliriz. İşte tam da bu sorunun cevabıdır aslında static kavramı. Şimdi yazdığımız bir kod üzerinde bunu incelersek umuyorum ki taşlar yerine daha iyi oturacaktır.

public class SayacArtir {
    
static int count = 0;
        int sayac=0;

SayacArtir() {
count++;
                sayac++;
}

void method1() {
System.out.println("metod1 içinde count Değeri:"+count); 
          System.out.println("metod1 içinde sayac Değeri:"+sayac);          
}
     
static void method2(){
         System.out.println("Metod2 içinde count Değeri:"+count); // OK
        //System.out.println(sayac); // ERROR
        //static olan metoddan static olmayan değer çağrılmaz 
 }

public static void main(String[] args) {
        new SayacArtir();
        new SayacArtir();
new SayacArtir();
                
//method1(); //static olan metod içinden static olmayan metod çağrılmaz
SayacArtir sayacArtir= new SayacArtir();
        sayacArtir.method1();//ancak böyle tanımlayıp çağırırız
        method2(); //fakat static metodu nesne oluşturmadan direkt çağırabiliriz
        System.out.println("Main içinde Count Değeri:" + count); 
        //System.err.println(""+sayac); static olmadığından error verir
        System.out.println("Main içinde Sayac Değeri:"+sayacArtir.sayac);
}
}

ÇIKTI:
metod1 içinde count Değeri:4
metod1 içinde sayac Değeri:1
Metod2 içinde count Değeri:4
Main içinde Count Değeri:4
Main içinde Sayac Değeri:1

       Burada önemli bir konu daha vardı o da static metodların override edilmemesiydi.Bunu yukarıda da belirmiştik ama şimdi bunu kod ile incelersek daha iyi ifade etmiş oluruz kendimizi ve böylece konuyu noktalamış oluyoruz. Not: Aşağıdaki kod scjp kitabından alıntıdır.

class Animal {
  static void doStuff() {
    System.out.print("a ");
  }
}
class Dog extends Animal {
  static void doStuff() {
    System.out.print("d ");  //burada override olmamıştır.
    //eğer metod static olmasaydı çıktığımız a d olacaktı
  }
  public static void main(String [] args) {
    Animal [] a = {new Animal(), new Dog()};
    for(int x = 0; x < a.length; x++)
      a[x].doStuff();          
  }
}
ÇIKTI
a a



Hiç yorum yok:

Yorum Gönder