Java Class Yapısında Finalize Metotunun Kullanımı

Benzer belgeler
/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

7. HAFTA. Erişim Belirleyiciler

BİL-141 Bilgisayar Programlama I (Java)

Başlangıç Durumuna Getirme ve Temizlik. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 3 1

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 3

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Java String İşlemleri

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

BİL132 Bilgisayar Programlama II

Erişim konusunda iki taraf vardır:

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

// hataları işaret eden referans

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Nesne Tabanlı Programlama

MOBIL UYGULAMA GELIŞTIRME

Nesne Yönelimli Programlama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 4. Yrd.Doç.Dr.Hacer Karacan

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir.

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Sunum İçeriği. Programlamaya Giriş

Java Programlama Güz Dönemi CLASS YAPISI

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

ECLIPSE PROGRAMININ ÇALIŞTIRILMASI

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi SERVİS BİLEŞENLERİ. BLM401 Dr.Refik SAMET

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi YAYIN ALICILARI. BLM401 Dr.Refik SAMET

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

Nesneye Dayalı Programlama

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

SINIFLARIN TEKRAR KULLANILMASI

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

İÇİNDEKİLER VII İÇİNDEKİLER

Nesne Yönelimli Programlama

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Android Ders Notları

ByteArrayOutputStream

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

Klavyeden Basit Giriş/Çıkış İşlemleri

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

BİL-141 Bilgisayar Programlama I (Java)

public static int Toplam int x, int y

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

BMH-303 Nesneye Yönelik Programlama

Programlama Dillerinde Kullanılan Veri Tipleri

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6

Ders 8 Konu Özeti ve Problemler

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

DATA STRUCTURES. Part III. Sınıflar, Nesneler ve İlgili Programlama Örnekleri

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

3.1. Başlangıç Durumuna Getirme İşlemi ve Yapılandırıcılar (Initialization and Constructor)

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java da İstemci Tarafı Uygulamalar

Proje 1. Arayüz Tasarımı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

İstisnalar (Exceptions) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 8 1

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Command Nesnelerini Kullanarak Tablolarda Değişiklik Yapmak:

Merge Sort Bireşen Sıralama

NESNEYE YÖNELİK PROGRAMLAMA

VERİ TABANI İŞLEMLERİ (NESNE TABANLI PROGRAMLAMA TEKNİĞİ İLE)

JAVA API v2.0 Belge sürümü: 2.0.2

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10

Nesneye Dayalı Programlama

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

Decorator Tasarım Şablonu

BMH-303 Nesneye Yönelik Programlama

Örnek 1: Programı yazın ve çalıştırın.

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

HSancak Nesne Tabanlı Programlama I Ders Notları

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

POLIMORFIZM. Java ve Yazılım Tasarımı ; Bölüm- 6. Örnek: PolimorfizmOrnekBir.java (yorum ekle)

Transkript:

Java'da finalize() Metodu: Java dili kullanılmayan nesneleri silmek için arka planda çalışan bir sisteme sahiptir. Bu yüzden C++ gibi dillerde dinamik nesne tanımlarında mutlaka yer alması gereken nesneyi silme metodları javada o kadar gerekli değildir. Fakat eğer kendiniz metlaka bir nesneyi acil olarak silmek isteseniz finalize() isimli bir metodu sınıfınızda tanımlayıp kullanabilirsiniz. Örnek olarak aşağıdaki metodu verebiliriz. Örnek Kullanım: package deneme; protected void finalize() throws Throwable { try { close(); catch(exception e) { finally { super.finalize(); //Buraya uygulamanızla ilgili kodlar yazmanız gerekli... Java, C gibi nesneler için sonlandrma yöntemleri vardır bunu C++ keşfetti.ancak, aynı şekilde Java çöp toplama nedeniyle böyle davranmaz. Java, bir sonlandrma yöntemi aşağıdaki prototip vardır: protected void finalize(); java.lang.object. Bu yöntem, bu açık kaynak bir nesne ait yayın istiyor herhangi bir görev yapabilir. Örnek Olarak: package deneme; class Test { protected void finalize() { 1

System.out.println("Removed"); public static void main(string[] args) { Test c = new Test(); Eğer bu program çalıştırıldığında ekrana herhangi bir çıktı gelmezse, aşağıdakini deneyin kesinlikle bir çıktı alacaksınız. package deneme; class Test { protected void finalize() { System.out.println("Removed"); public static void main(string[] args) { Test c = new Test(); Her sınıf Nesne ve sınıf yönteminden genellikle çöp toplayıcısı tarafından finalize() fonksiyonu sonlandırmak o nesne var artık referanslar. Nesnenin sınıf yöntemi sonlandrdktan çok normal bir Java sınıf tarafından temizlemek üzerine ise önemli bir hareket yapar sağlar devralır kodu bir dosya yakın örneğin, vb veritabanı bağlantıları kapanış. Ama en iyi uygulama bir deneyin yakalamak nihayet beyanı ve finalize() yöntemi super.finalize aramak için kullanmaktır.finalize bir kez ve sadece bir kez, her nesne için çalışır. Eğer yeni oluşturduğunuz class ınızda composition yöntemi ile diğer class ları kullanmışsanız, bu kullanılan class ların finalize() methodlarının çağrılmasını hakkında herhangi bir endişemiz olamaz.fakat işin içine kalıtım girerse işler biraz renk değiştirir, şöyleki ; eğer türemiş bir class ın finalize() methodunun içinden ana class ının finalize() methodunu çağırmadınız sürece, ana class ın finalize() methodu çağrılmaz. Bunun sebebi, ilk olarak türetilmiş class ın yok olması gerektiğindendir. Ana class, türemiş class dan daha önce hafısazan silinirse, birçok hata ile karşılaşmamız mümkün. Aşağıdaki örnekte türemiş class ın finalize() methodunun içinde ana class ın finalize methodu çağılmadı ve bakin ortaya nasil ilginç bir görüntüler çıktı. Örnekler: package javaapplication16; // kalitim ve finalize - I class Vitamin { private String isim; public Vitamin(String gelen) { isim = gelen; 2

System.out.println("Vitamin yapilandirici " + isim); public void finalize() { System.out.println("Vitamin finalize() " + isim); class Bugday { Vitamin a = new Vitamin("Bugday"); public Bugday() { System.out.println("Bugday yapilandirici"); System.out.println("Bugday finalize()"); class Un extends Bugday { Vitamin a = new Vitamin("Un"); public Un() { System.out.println("Un yapilandirici"); System.out.println("Un finalize()"); class Ekmek extends Un { Vitamin a = new Vitamin("Ekmek"); public Ekmek() { System.out.println("Ekmek yapilandirici"); System.out.println("Ekmek finalize()"); public class NewJApplet { public static void main(string args[]) { new Ekmek(); System.out.println("Temizlik Basliyor.. "); System.gc(); 3

//^ Çıktı Önizleme: Constructor (yapilandirici) methodlar daha evvelden değindiğimiz gibi sırasıyla çağrılıyor bu kısımları geçiyorum, dikkatinizi Temizlik Baslıyordan sonraya çekmek istiyorum. Temizlik Basliyor.. Ekmek finalize() Vitamin finalize() Bugday Vitamin finalize() Un Vitamin finalize() Ekmek System.gc() komutu ile Garbage Collector tetiklendi, eğer bu komut çağrılmasaydı belkide hiç bir obje hafızandan temizlenmiyecekti (sadece tahmin) çünki Garbage Collector, hafızanın doluluk oranına göre çağrılır. Eğer bizim yazdığımız kod çok fazla çöp obje üretmiyorsa(hafızayı şişirmiyorsak) o zaman GC devreye hicbir zaman girmeyebilir ve tabii o zaman da finalize metoduda çağrılmaz. Ekmek objesinin finalize() methodu ve kullanığımız üç adet vitamin objesinin finalize() methodları çağrıldı. Bu üç adet vitamin objesinin finalize() methodlarının çağrılmasının sebebi daha evvelden belirttiğim gibi composition yöntemi ile class lara dahil edilmeleri. Peki neden Bugday ve Un objelerinin finalize() methodları çağrılmadı?? Bunun sebebi, Ekmek class ının finalize() metodunda bizim manuel olarak bu class ların finalize() metodlarını çağırmamızdan kaynaklanıyor. Java bu olayda kontrolu bize vermişdir. Kural şöyle : Eğer türemiş class ın varsa, türetilen class ın finalize() methodunu çağırmak senin sorumluluğundadır. Bir objenin finalize() methodunun çağrılması onun hafızadan atılması anlamına geldiğini daha evvelki konulardan biliyorduk. Yani??, türetilen class ın finalize() methodunun çağrıldığı şekilde yukarıdaki örneği değiştirelim. Objelerin hafızadan silenmesi sıralamasına bakaranız, yaratılma sırasının tam tersi olduğunu göreceksiniz. Dediklerimizi Kod a dökersek : 4

package javaapplication16; // kalitim ve finalize - II class Vitamin { private String isim; public Vitamin(String gelen) { isim = gelen; System.out.println("Vitamin yapilandirici " + isim); public void finalize() { System.out.println("Vitamin finalize() " + isim); class Bugday { Vitamin a = new Vitamin("Bugday"); public Bugday() { System.out.println("Bugday yapilandirici"); System.out.println("Bugday finalize()"); class Un extends Bugday { Vitamin a = new Vitamin("Un"); public Un() { System.out.println("Un yapilandirici"); System.out.println("Un finalize()"); super.finalize(); class Ekmek extends Un { Vitamin a = new Vitamin("Ekmek"); public Ekmek() { System.out.println("Ekmek yapilandirici"); System.out.println("Ekmek finalize()"); 5

super.finalize(); public class NewJApplet3 { public static void main(string args[]) { //^ new Ekmek(); System.out.println("Temizlik Basliyor.. "); System.gc(); Ekmek ve Un class larının finalize() metodlarına dikkat edelim. Artik super.finalize() sayesinde türetilen objeninde finalize() methodu da çağrılıyor.yangın en aşağıdan başlayarak başayalarak en yukarıdaki class doğru ilerleyebilir. Çıktı Önizleme: finalize() Metodunun çalışma prensibine örnek olarak: 6

7

Mehmet EMEK Kaynaklar: www.programlama.com http://www.janeg.ca/scjp/gc/finalize.html http://www.java-tips.org/java-ee-tips/enterprise-java-beans/how-to-write-finalization-code-in.html http://www.devx.com/java/article/30192 http://forums.sun.com/thread.jspa?threadid=753023 http://www.programlama.com/sys/c2html/view.php?docid=36 8