06.03.2015 Views

Java Kitabı

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

JAva`nın çalışma mantığıyla başlayıp basitten gelişmişe iyi bir kaynak

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Yukarıda uygulamaya gönderilen iki parametre toplanıp sonucu ekrana yazdırılmıĢtır.<br />

Sonuç olarak eğer bir yordam, nesnenin durumuna iliĢkin bir misyon yükleniyorsa, o yordamı nesne<br />

yordamı olarak tanımlamamız en uygun olanıdır. Yani ilgili sınafa ait bir nesne oluĢturulmadan, nesneye ait<br />

bir yordam (statik olmayan) çağrılamaz. Ama eğer bir yordam sadece atomik iĢlemler için kullanılacaksa<br />

(örneğin kendisine gelen String bir ifadenin hepsini büyük harfe çeviren yordam gibi) ve nesnenin<br />

durumuna iliĢkin bir misyon yüklenmemiĢ ise o yordamı rahatlıkla statik yordam (sınıf yordamı) olarak<br />

tanımlayabiliriz. Dikkat edilmesi gereken bir baĢka husus ise uygulamalarınızda çok fazla statik yordam<br />

kullanılmasının tasarımsal açıdan yanlıĢ olduğudur. Böyle bir durumda, stratejinizi baĢtan bir kez daha<br />

gözden geçirmenizi öneririm. ()<br />

3.2. Temizlik İşlemleri: finalize() ve Çöp Toplayıcı (Garbage Collector)<br />

Yapılandırıcılar sayesinde nesnelerimizi oluĢturmadan önce, baĢlangıç durumlarının nasıl verildiğine<br />

değinildi; Peki, oluĢturulan bu nesneler daha sonradan nasıl bellekten silinmektedir? <strong>Java</strong> programlama<br />

dilinde, C++ programla dilinde olduğu gibi oluĢturulan nesneleri, iĢleri bitince yok etme özgürlüğü kodu<br />

yazan kiĢinin elinde değildir. <strong>Java</strong> programlama dilinde, bir nesnenin gerçekten çöp olup olmadığına karar<br />

veren mekanizma çöp toplayıcısıdır. ()<br />

ÇalıĢmakta olan uygulamanın içerisinde bulunan bir nesne artık kullanılmıyorsa, bu nesne çöp toplayıcısı<br />

tarafından bellekten silinir. Çöp toplama sistemi, kodu yazan kiĢi için büyük bir rahatlık oluĢturmaktadır<br />

çünkü uygulamalardaki en büyük hataların ana kaynağı temizliğin (oluĢturulan nesnelerin, iĢleri bitince<br />

bellekten silinmemeleri) doğru dürüst yapılamamasıdır. ()<br />

3.2.1. finalize() Yordamı<br />

Çöp toplayıcı (garbage collector) bir nesneyi bellekten silmeden hemen önce o nesnenin finalize()<br />

yordamını çağırır. Böylece bellekten silinecek olan nesnenin yapması gereken son iĢlemler var ise bu<br />

iĢlemler finalize() yordamı içerisinde yapılır. Bir örnek ile açıklanırsa, örneğin bir çizim programı<br />

yaptık ve elimizde ekrana çizgi çizen bir nesnemiz olduğunu düĢünelim. Bu nesnemiz belli bir süre sonra<br />

gereksiz hale geldiğinde, çöp toplayıcısı tarafından bellekten silinecektir. Yalnız bu nesnemizin çizdiği<br />

çizgilerin hala ekranda olduğunu varsayarsak, bu nesne çöp toplayıcısı tarafından bellekten silinmeden<br />

evvel, ekrana çizdiği çizgileri temizlemesini finalize() yordamında sağlayabiliriz. ()<br />

Akıllarda tutulması gereken diğer bir konu ise eğer uygulamanız çok fazla sayıda çöp nesnesi<br />

(kullanılmayan nesne) üretmiyorsa, çöp toplayıcısı (garbage collector) devreye girmeyebilir. Bir<br />

baĢka nokta ise eğer System.gc() ile çöp toplayıcısını tetiklemezsek, çöp toplayıcısının ne zaman<br />

devreye girip çöp haline dönüĢmüĢ olan nesneleri bellekten temizleyeceği bilinemez. ()<br />

Örnek-3.17: Temizle.java ()<br />

class Elma {<br />

int i = 0 ;<br />

Elma(int y) {<br />

this.i = y ;<br />

System.out.println("Elma Nesnesi Olusturuluyor = " + i );<br />

}<br />

}<br />

public void finalize() {<br />

System.out.println("Elma Nesnesi Yok Ediliyor = "+ i );<br />

}<br />

public class Temizle {<br />

public static void main(String args[]) {<br />

for (int y=0 ; y

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!