Java Deger Atama ve Local Değişkenler

Değişkenlereilk değerlerini atama

Javauygulamalarında üç tür değişken çeşiti bulunur , yerel (local) değişkenler, obje'ye ait global değişkenler ve son olarak sınıfa aitglobal değişkenler(statik değişkenler). Bu değişkenlerin tipleri ilkel(primitive) veya herhangi bir obje tipi olabilir.
ör-javada-degiskenler
public class DegiskenGosterim {
 
    int x ; //objeye ait global degisken
    static int y ; // sınıfa ait global degisken
    public void metod () {
        int i ; //yerel degisken
        //static int y = 5 ;  // yanlis
    }
}

Yerel(local)değişkenler

Yereldeğişkenlere kesin olarak ilk değerleri kodu yazan kişi tarafındanverilmelidir. İlk değeri verilmeden kullanılan yerel değişkenlere uyarı ,derleme(compile-time) anında verilir.
gösterim-11
public int hesapla () { // yerel değişkenlere ilk değerleri her zaman verilmelidir.
 
    int i ; 
 
    i++; // ! Hata ! ilk deger verilmeden üzerinde işlem yapılamaz
 
    return i ;
 
}

Objeyeait global değişkenler

Objelereait global değişkenler'e ilk değerlerini kodu kişi vermek zorunda değildir.Java bizim yerimize bu değişkenlere ilk değerlerini verir.
Objeyeait global ilkel tiplerde ilk değeri atama
Global olanilkel tipdeki değişkenlere Javanın hangi değerleri atadığını görmek içinaşağıdaki örneğimizi inceliyelim :


ör-objeye-global-ilkel-tipler
public class  IlkelTipler {
 
  boolean mantiksal_deger;
  char krakter_deger;
  byte byter_deger;
  short short_deger;
  int int_deger;
  long long_deger;
  float float_deger;
  double double_deger;  
 
  public void ekranaBas() {
     System.out.println("Veri Tipleri   Ilk Degerleri");
     System.out.println("boolean        " + mantiksal_deger );
     System.out.println("char           [" + krakter_deger + "] "+ (int)krakter_deger ); 
     System.out.println("byte           " + byter_deger );
     System.out.println("short          " + short_deger );
     System.out.println("int            " + int_deger );
     System.out.println("long           " + long_deger );
     System.out.println("float          " + float_deger );
     System.out.println("double         " + double_deger);
 
  }
 
  public static void main(String args[]) {
        new IlkelTipler().ekranaBas();
        /* 
               // yukaridaki ifade yerine 
               // asagidaki ifadeyi de kullanabilirsiniz.
               IlkelTipler it = new IlkelTipler();
               it.ekranaBas();
        */
  }
}
Uygulamamızınçıktısı aşağıdaki gibidir :
Veri Tipleri Ilk Degerleri
boolean false
char [ ] 0
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
Objeyeait global obje tiplerinde ilk değeri atama
Globalolan herhangi bir obje tipindeki değişkene Java tarafından ilk değer olarak"null" atanır . Eğer bu değişken vasıtası ile işlem yapmakistersek hata ile karşılaşırız , sebebi ise bu obje tipindeki değişkenin henüzkendi tipindeki bir objeye bağlanmamasıdır.
ör-objeye-ait-global-obje-tipi
public class  ObjeTipleri {
 
   String s ;    
 
  public static void main(String args[]) {
        ObjeTipleri ot = new ObjeTipleri();
        System.out.println("s = " + ot.s );
        // ot.s = ot.s.trim(); // ! hata ! 
  }
}
Uygulamamızınçıktısı aşağıdaki gibidir
s = null

Sınıflaraait global değişkenler

Sınıflaraait global değişkenler'e değer atamak ile objelere ait globaldeğişkenlere değer atamak arasında bir fark yoktur. Buradaki önemli noktastatik değişkenelere sadece bir kere değer atandığıdır.Örnekler ileaçıklaya çalışırsak :
Sınıflaraait global ilkel tiplerde ilk değeri atama
ör-sınıfa-ait-global-ilkel-tipler
public class  IlkelTiplerStatik {
 
  static boolean mantiksal_deger;
  static char krakter_deger;
  static byte byter_deger;
  static short short_deger;
  static int int_deger;
  static long long_deger;
  static float float_deger;
  static double double_deger;
  
 
  public void ekranaBas() {
     System.out.println("Veri Tipleri    Ilk Degerleri");
     System.out.println("static boolean  " + mantiksal_deger );
     System.out.println("static char     [" + krakter_deger + "] "+ (int)krakter_deger ); 
     System.out.println("static byte     " + byter_deger );
     System.out.println("static short    " + short_deger );
     System.out.println("static int      " + int_deger );
     System.out.println("static long     " + long_deger );
     System.out.println("static float    " + float_deger );
     System.out.println("static double   " + double_deger);
  }
 
  public static void main(String args[]) {
        new IlkelTiplerStatik().ekranaBas();
        /*     
               // yukaridaki ifade yerine 
               // asagidaki ifadeyi de kullanabilirsiniz.
               IlkelTiplerStatik its = new IlkelTiplerStatik();
               its.ekranaBas();
        */
  }
}
Uygulamamızınçıktısı aşağıdaki gibidir
Veri Tipleri Ilk Degerleri
static boolean false
static char [ ] 0
static byte 0
static short 0
static int 0
static long 0
static float 0.0
static double 0.0
Sınıflaraait global obje tiplerinde ilk değeri atama
Sınıflaraait globalolan herhangi bir obje tipindeki değişkene Java tarafından ilk değerolarak "null" atanır.
ör-sınıfa-ait-global-obje-tipi
public class  StatikObjeTipleri {
 
   static String s ;    
 
   public static void main(String args[]) {
        StatikObjeTipleri sot = new StatikObjeTipleri();
        System.out.println("s = " + sot.s );
        // sot.s = sot.s.trim(); //hata
  }
 
}
Uygulamamızınçıktısı aşağıdaki gibidir .
s = null

İlkdeğerleri atarken metod kullanımı

Globalolan objeye ait veya statik değişkenlere ilk değerleri bir metodaracılığı ile de atanabilir.
ör-objeye-ait-global-deg-deger-atamak
public class  KarisikTipler {
 
  boolean mantiksal_deger = mantiksalDegerAta() ;//true degerini alir
  static int int_deger = intDegerAta(); // 10 degerini alir
  String s  ; 
  double d = 4.17 ;  
 
  public boolean mantiksalDegerAta() {
      return true ;
  }
 
  public static int intDegerAta() {
      return 5*2 ;
  }
 
  public static void main(String args[]) {
        new KarisikTipler();
  }
}
Dikkatedecek olursanız , statik bir değişken olan int_deger değişkenineait ilk değer statik bir metod tarafında verildi.

İlkdeğer verme sıralaması

Objeyeait global değişkenlerde ilk değer hemen verilir , hatta yapılandırıcıdanbile önce.Değişkenlerin konumu hangi sırada ise , ilk değer vermesıralamasıda aynı sırada olur.
ör-ilk-deger-verme-sirasi
class Kagit {
 
    public Kagit(int i) {
        System.out.println("Kagit ("+i+") ");
    }
}
 
 
public class Defter {    
 
    Kagit k1 = new Kagit(1);   
 
    public Defter() {
        System.out.println("Defter() yapilandirici metod");
        k2 = new Kagit(33); // artik baska bir Kagit objesini isaret etmektedir
    }
 
    Kagit k2 = new Kagit(2);
    public void islemTamam() {
        System.out.println("Islem tamam");    
    }
    Kagit k3 = new Kagit(3);
 
    public static void main (String args[]  ) throws Exception {
     Defter d = new Defter();
     d.islemTamam();
    }
}

Uygulamamızınçıktısı aşağıdaki gibidir.
Kagit (1)
Kagit (2)
Kagit (3)
Defter() yapilandirici metod
Kagit (33)
Islem tamam
Uygulamamızın çıktısından da anlaşıldığı üzere , ilk olarak k1 daha sonra k2ve en son olarakta k3 değişkenine değer atandı.Değişkenlerimizedeğer atandıktan sonra yapılandırıcı çağrıldı. Ayrıca k3değişkeni yapılandırıcının içersinde , oluşturulan başka bir Kagit objesinebağlanmıştır , peki k3 değişkeninin daha evvelden bağlanmış Kagitobjeye ne olacaktır ? .Cevap çöp toplayıcısı (garbage collector)tarafından hafızdan silinecektir. Uygulamamız en son olarak islemTamam()metodunu çağırarak çalışmasını sonra erdirmektedir.

Statikve statik olmayan değişkenlerin değer alma sıralaması

Statikdeğişkenler , sınıflara ait olan değişkenlerdir ve statik olmayan (objedeğişkenleri) değişkenlere göre ilk değerlerini daha önce alırlar.
ör-deger-alma-sıralaması
class Peynir {
 
    public Peynir(int i, String tur) {
      System.out.println("Peynir ("+i+") -->" + tur);
    }
}
 
class Tabak {
    public Tabak(int i, String tur) {
      System.out.println("Tabak ("+i+") -->" + tur);
    }
 
    static Peynir p1 = new Peynir(1,"statik degisken");
    Peynir p2 = new Peynir(2,"statik-olmayan degisken");
} 
 
class Catal {
    public Catal(int i , String tur) {
        System.out.println("Catal ("+i+") --> " + tur);
    }
}
 
public class Kahvalti {    
 
    static Catal  c1 = new Catal(1,"statik degisken");    
 
    public Kahvalti() {
        System.out.println("Kahvalti() yapilandirici metod");
    }
 
    Tabak t1 = new Tabak(1,"statik-olmayan degisken");
    public void islemTamam() {
        System.out.println("Islem tamam");    
    }    
 
    static Catal  c2 = new Catal(2,"statik degisken");
 
    public static void main (String args[]  ) throws Exception {
     Kahvalti d = new Kahvalti();
     d.islemTamam();
    }
 
    static Tabak t4 = new Tabak(4,"statik degisken");
    static Tabak t5 = new Tabak(5,"statik degisken"); 
}
Sırasıylagidersek , ilk öncelikle c1 , c2 , t4 , t5 statikdeğişkenlerine ilk değerleri verilecektir.Catal objesini oluştururken,yapılandırıcısına iki adet parametre gönderiyoruz , bunlardan biri intilkel tipi(primitive) diğeri ise String tipindeki parametredir.Böylecehangi Catal tipindeki değişkenlerin , hangi Catal objelerinebağlandığını anlayabiliriz.Catal objesini oluştururken olaylar gayetaçıktır, yapılandırıcı metod çağrılır ve ekrana gerekli bilgiler bastırılır.
Catal (1) --> statik degisken
 
Catal (2) --> statik degisken
Tabak objesini t4 değişkenine bağlarken yine iki adet parametre kullanıyoruz .Biri int tipi diğeri iseString .Fakat Tabak sınıfını incelersek , yapılandırıcıyıçağırmadan evvel bazı işlemlerin yapılması gerektiğianlarız. Biri statik diğeri ise obje değişkeni olan bu iki global değişkene ,Tabak sınıfına ait yapılandırıcıyı çağırmadan evvel ilk değerleri verilir.Statik olan değişkenin her zaman daha önce ve yanlız bir kere ilkdeğerini aldığı kuralını hatırlarsak , ekrana yansıyan sonuçun kafamızdaki ileaynı olduğunu görürüz
Peynir (1) -->statik degisken
Daha sonradanda statik olmayan Peynir tipindeki değişkenimize ilk değerverilir.
Peynir (2) -->statik-olmayan degisken
Ve nihayetTabak sınıfının yapılandırıcısı çalıştırılarak , Tabak objesi oluşturulur.
Tabak (4) -->statik degisken
Buişlemlerde sonra sıra t5 değişekine Tabak objesini bağlamaya geldi, bu işlemde sadece statik olmayan Peynir tipindeki p2değişkenine değer atanır.Statik olan değişken tipi bu esnada herhangi bir veriatanmaz sebebi ise statik değişken tiplerine sadece bir kere değeratanabilmesidir. Bu işlemden sonra Tabak objesinin yapılandırıcısana girilir.
Tabak (5) -->statik degisken
 
Peynir (2) -->statik-olmayan degisken
Sonra objedeğişkeni olan t1 değişkenini Tabak objesini bağladık.
Tabak (1) -->statik-olmayan degisken
Son işemdenbir önceki işlem olarak, Kahvalti sınıfının yapılandırıcısı çağırdaktanKahvalti objesini oluşturuyor.
Kahvalti() yapilandirici metod
En sonişlem olarak, Kahvalti objesinin islemTamam() metodunu çağırarak, ekranaaşağıdaki mesajı bastırırız.
Islem tamam
Ekrançıktısını toplu halde gösterirsek :
Catal (1) --> statik degisken
Catal (2) --> statik degisken
Peynir (1) -->statik degisken
Peynir (2) -->statik-olmayan degisken
Tabak (4) -->statik degisken
Peynir (2) -->statik-olmayan degisken
Tabak (5) -->statik degisken
Peynir (2) -->statik-olmayan degisken
Tabak (1) -->statik-olmayan degisken
Kahvalti() yapilandirici metod
Islem tamam

Statikdeğişkenlere toplu değer atama

Statikdeğişkenlerimize toplu olarakta değer atıyabiliriz
ör-statik-toplu-deger-atama
class Kopek {
 
    public Kopek() {
        System.out.println("Hav Hav");
    }
}
 
 
 
public class StatikTopluDegerAtama {
 
    static int x  ;
    static double y ;
    static Kopek kp ;
    {
        x = 5 ;
        y = 6.89 ;
        kp = new Kopek();
    }
 
    public static void main(String args[]) {
        new StatikTopluDegerAtama();
   }   
}
Statikdeğişkenlerimize toplu değer vermek için kullandığımız bu blok sadece , StatikTopluDegerAtamasınıfınından obje oluşturduğumuz zaman veya bu sınıfa ait herhangi bir statikdeğişkene erişmeye çalıştığımız zaman (statik alanlara erişmek için objeoluşturmak zorunda değilsiniz), bir kere çağrılır.

Statikolmayan değişkenlerine toplu değer atama

Statikolmayan değişkenlerine toplu değer verme , şekilen statik değişkenlere topludeğer vermek gibidir.
ör-non-static-toplu_deger_atama
class Dinozor {
    public Dinozor() {
        System.out.println("Ben Denver");
    }
}
 
public class NonStatikTopluDegerAtama {
 
    int x  ;
    double y ;
    Dinozor dz ;
    {
        x = 5 ;
        y = 6.89 ;
        dz= new Dinozor();
    }
 
    public static void main(String args[]) {
        new NonStatikTopluDegerAtama();
   }   
}

Yorumlar

Adsız dedi ki…
java da global değişken diye bişey yoktur sınıf değişkeni yerel değişken ve nesne değişkeni vardır

Bu blogdaki popüler yayınlar

Soru ve Cevaplarla Kompanzasyon

Aktif Güç Nedir,Reaktif Güç Nedir

Sinusoidal AC dalga şekli, Tepe, ortalama, efektif(rms), değer tanımları...