Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

13 Eylül 2009 Pazar

Java da static kavramı



/**
static degisken ve metod lara C# tan farkli olarak JAVA da, siniftan türetilmis objelerden(örneklerden, nesnelerden)
erisilebilir.
*/

public class Cem
{
static String yazi;

public Cem()
{
yazi = "yazzzzz";
}

public static void main(String[] args)
{
yaz("sininftan: " + Cem.yazi);

Cem ornek = new Cem();
yaz("ornekten: " + ornek.yazi);

Cem.yaz("statik metoda C# tan eristigimiz gibi eriselim");
ornek.yaz("statik metoda örnekten de erisebiliyorum");
}

public static void yaz(String s)
{
//System.out.println("dd");
System.out.println(s);
}
}

Java da overload.


/**
Çalıştırmak istediğimiz metod topla(3,5) olsun.
Elimizde overload edilmiş:
topla(int a, long b)
topla(long a, long b) olsun.

Ama aradığımız metod topla(int a, int b) idi.
E yok ama... O zaman en yakın olan
topla(int a, long b) metodunu çalıştırır.

o da olmasaydı
topla(long a, long b) metodunu çalıştırırdı.
*/

public class OverLoad {

public static String topla(int a,long l)
{
return "int long";
}

public static String topla(long l1,long l2)
{
return "long long";
}

public static void main(String[] s)
{
System.out.println(topla(3,5));
}

}

Stack Heap hakkında

Bir programın çalıştığında artık bir proses olarak isimlendirildiğini biliyoruz.

Bir proses çalıştığında kendisine stack ve heap üzerinede yerler ayrılır.

Peki stack ve heap nedir?

İşte budur:

Stack,



  • bir thread çalıştırıldığında bellekte thread ile ilgili yerel değişkenler ve metotlar için ayrılan yerdir.

  • LIFO (Son giren ilk çıkar) mantığına göre çalışır.

  • Fonksiyon çalıştırıldığında stack'in en üstünde bir blok ayrılır(mavi kutuları blok olarak düşünün). Bu blok içinde fonksiyon içindeki değişkenlerin (ki bu değişkenler de heap üzerinde yaratılır -sarı kutucukları düşünebilirsiniz bu değişkenler/nesneler için-) adreslerini bulunur. Fonksiyon değer döndükten ya da fonksiyonun kod bloğu bittikten sonra stack üzerinde kullanılmayan olarak bir sonraki çağırılmasını bekler.

  • Görüldüğü üzere stack çok basit bir mantık ile çalışır. Takip edilmesi kolaydır.

  • Stack üzerindeki blokların çağırılması çok sık olabileceği için işlemcinin cache ine de maplenir. Bu da onu heapten daha hızlı kılar.

  • Stack için ayrılan bölge proses çalıştırıldığında set edilir. (genellikle program başlatıldığında sistem ne kadar yer gerektiğini bilir ama sizde bunu set edebilirsiniz. Bu bölgedeki boyut geçilirse "stack overflow" hatası alırsınız.)

Heap,


istediğmiz zaman ve istediğimiz yerde blok ayırmamızı sağlayan ve takip edilmesi daha karmaşık xbir bellek bölgesidir ve keyfe keder yer ayırıp silebilmemize olanak veren bu yapısından dolayı daha yavaştır.


Heap dinamik olduğu için prosesin çalıştırıldığında ayrılan boyutu, dinamik olarak OS tarafından arttırılabilir.


Güzel bir resimle pekiştirelim (kaynak vererek tabii: http://vikashazrati.files.wordpress.com/):


Kaynak: http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx

Java maceram başladı

Dün(120909) itibarıyla java kursuna bilginç de başlamış durumdayım. Amacım daha iyi kod yazabilen birisi olmak. .Net zaten kod geliştirdiğim platform ve çok merak ettiğim java yı da öğrenme yolunda bir adım attım. Yüzümüz ak olur inşallah.