38 the finalize()

Merhaba Arkadaslar,
Bir onceki yazimizda Java’daki Garbage Collection mekanizmasindan bahsetmistik. Bu yazimda ise bu mekanizma ile iliskili olan ve Object sinifinda bulunan finalize() metodundan bahsedecegim. Object sinifi Java’da sinif hiyerarsisinin tepesinde bulunmaktadir ve tum siniflar Object sinifini kalittigi icin her sinifin ornegi/instance’i bu finalize() metoduna sahip olacaktir.

Object sinifinda finalize metodunu inceledigimizde ;

	protected void finalize() throws Throwable {
	}

seklinde tanimlandigini gorururuz. Ici bos oldugu icin ilgili Sinifta bu metodu override etmemiz gerekir.

  • Garbage Collection mekanizmasi , Garbage Collector(GC) ile Heap’ten ilgili objeyi silmeden once, finalize() metodunu cagirir. Bunun bize ne gibi bir faydasi olabilir, obje silinmeden once yapmamiz gereken bir islem olabilir. Dosya kapatma islemi gibi bir islem olabilir veya silinmek uzere olan (eligible/uygun) objeyi silinmekten kurtarabiliriz (uneligible duruma getirebiliriz)
  • finalize() metodu GC tarafindan sadece bir kez cagrilabilir.
  • Eger GC bir objeyi silmeye karar verdiyse ve finalize() metodu kod icerisinden cagrilmadiysa, GC , finalize() metodunu cagirmayi garanti eder.
  • Hatirlaycagimiz gibi GC her objeyi silmek gibi bir garanti saglamaz. Dolayisiyla finalize() metodu hic calismayabilir.

Continue reading 38 the finalize()

37 Garbage Collection

Merhaba Arkadaslar bu yazimda Java da Garbage Collection mekanizmasindan bahsedecegim.

Oncelikle Garbage Collection nedir sorusuna yanit arayalim , Garbage Collection memory/kaynak yonetiminin adidir. Bir bilgisayar programi calistiginda ister Java ister C, C++ veya farkli bir dil olsun memory(hafiza) kullanimi soz konusudur.  C gibi dillerde pointer kullanimi, calloc() , malloc() ve free() gibi fonksiyonlarla memory yonetimi yapilirken Java da bu memory yonetimi Garbage Collector tarafindan saglanmaktadir.

Garbage Collector, otomatik Garbage Collection mekanizmasi ile memory-leak(bellek aciklari/sizintilari)’lere engel olarak Java’nin Robust (dayanikli, guclu,direncli) ozelligini saglamaya yardimci olur.
Ayrica C gibi dillerde olan free() fonksiyonu yerine, Javada Garbage Collector bu isi uslendigi icin bir nevi pointer mekanizmasindan kurtulmamiza destek saglar. Bu da Java’nin Simple(Basit) ozelligini saglamaktadir.
Java’nin ozelliklerine dair Akin Kaldiroglu hocamizin yazisini ve ingilizce kaynak olarak ilgili kaynagi inceleyebilirsiniz; Continue reading 37 Garbage Collection

36 More Overloading

Merhaba Arkadaslar,
Bir kac yazi boyunca Java’da Wrapper siniflari inceledik. Hatirlayacagimiz gibi Overloading konusunu onceki yazilarda incelemistik fakat daha derinlemesine inceleyecegimizi belirtmistim , bu yazida Overloading konusunu isin icine Wrapper siniflari ve Var-args degiskenlerini de katarak inceleyecegiz.

Overloading konusunun trickly olmasina neden olacak bir kac maddemiz sunlar olacak ;

  • Widening
  • Autoboxing
  • Var-args

Oncelikle kucuk bir hatirlatma icin basit bir kod ornegimizi gorelim ;

public class CoolClass {

	static void coolMethod(int x) {
		System.out.print("int ");
	}

	static void coolMethod(long x) {
		System.out.print("long ");
	}

	static void coolMethod(double x) {
		System.out.print("double ");
	}

	public static void main(String[] args) {

		byte b = 10;
		short s = 10;
		long l = 10;
		float f = 5.0f;

		coolMethod(b);
		coolMethod(s);
		coolMethod(l);
		coolMethod(f);
		// int int long double
	}
}

Continue reading 36 More Overloading

35 Wrapper Classes – 03

Merhaba Arkadaslar,
Bu yazimda  Boxing , AutoBoxing , Unboxing , AutoUnboxing  gibi konulardan ve giris olacak sekilde Wrapper siniflarda == (equality operatoru) ve equals metodundan bahsedecegim.

Boxing ve Unboxing islemleri , Wrapper siniflarin daha elverisli bir sekilde (convenient) kullanilmasini saglar.
Java 5 oncesinde bu ozellikler bulunmamaktaydi;

// Java 5 oncesi // Pre java 5		
Integer y = new Integer(1000);  // olustur
int x = y.intValue();          //ac
x++;                           // kullan
y = new Integer(x);            // tekrar olustur
System.out.println("y=" + y);  // ekrana bas

Java 5 sonrasinda ise su sekilde kullanilabilir ;

Integer y = new Integer(1000);  // olustur
y++;  // ac , kullan,tekrar olustur
System.out.println("y=" + y); //ekrana bas

Continue reading 35 Wrapper Classes – 03

33 Wrapper Classes – 01

Merhaba Arkadaslar, bu yazimda Java’da yer alan Wrapper siniflardan bahsedecegim. Wrapper’in turkce karsiligi sargi/sarici gibi anlama gelmektedir. Bu karsiligi aklimizda tutmakta fayda var. Oncelikle asagidaki tabloda Wrapper siniflar neler bunu gorebiliriz ;

OOP_WrapperClass

Dikkat edecek olursak Java’da yer alan tum primitive/ilkel tipler icin bir Wrapper sinif yer almaktadir. Bunlardan char haric digerlerinde sadece bas harfi buyuk char da ise Character sinifi olarak karsimiza cikmaktadir. Number abstract sinifi Byte, Short,Integer gibi Wrapper siniflarin super sinifidir.  Tum Wrapper siniflar Object sinifini kalitmaktadir. Dolayisiyla Wrapper turunden bir degisken primitive/ilkel tipte degildir.

Continue reading 33 Wrapper Classes – 01

32 Initialization Blocks

Merhaba Arkadaslar,
Bu yazimda Java’da bulunan initialization(ilk kullanima hazirlama) blocks konusundan bahsedecegim. Java da 2 turlu initialization block vardir.

  • static initialization block
  • instance initialization block

Bir sinif yuklediginde ilk olarak ve sadece 1 kez static initialization block calisir.st
Instance olusturulda her defasinda instance initialization block calisir.

Basit bir ornek yapalim ;

public class InititialTest {

	static {
		System.out.println("Static Initialization Block");
	}

	{
		System.out.println("Instance Initialization Block");
	}

	public static void main(String[] args) {

		System.out.println("Main -1 ");
		InititialTest initial = new InititialTest();
		InititialTest initial2 = new InititialTest();

	}

}

Continue reading 32 Initialization Blocks

31 Legal Array Element Assignments

Merhaba Arkadaslar ,
Bu yazimizda , array/diziler konusuna devam edecegiz ve diziler konusunu burada sonlandiracagi.Burada dizi elamanlarina deger atama ve dizilerin birine atanmasini konusuna biraz daha yakindan bakacagiz.

Bir dizinin farkli tipte elemanlari olsa bile, sadece tek bir tipte tanimlanabilir. ( int [] ,String[] , Animal[] )

int tipinde bir dizi elemani, byte, short veya char turunde olabilir , long , float ya da double turunde olamaz.

public class Test1 {

	public static void main(String[] args) {
		int[] coolArray = new int[6];

		byte b = 10;
		char c = 'c';
		short s = 20;
		long l = 50;
		float f = 10;
		double d = 100;

		coolArray[0] = b;
		coolArray[1] = c;
		coolArray[2] = s;
		// coolArray[3] = l; // compiler error
		// coolArray[4] =f //compiler error
		//coolArray[5] = d;  //compiler error

		for (int i : coolArray) {
			System.out.print(i + " ");
		}
	}
}

Continue reading 31 Legal Array Element Assignments

29 Array Construction

Merhaba Arkadaslar,
Bir onceki yazida Array Declaration konusunu incelemistik. Bu yazida Array Construction konusunu inceleyecegiz.

“Array Construction” ifadesinden kasit , bir array/dizi objesini Heap’te yaratmak/olusturmak/create anlamina gelmektedir. Bir array/dizi objesi yaratilmadan once Java, Heap’te bu obje icin ne kadar yer ayrilmasi gerektigini (allocate) bilmelidir. Bu nedenle dizinin boyutu, olusturulma zamaninda(creation time) belirli olmalidir.

Construction One-Dimensional Array ( Tek Boyutlu Dizi Olusturma)
Yeni bir dizi olusturmak icin new anahtar kelimesini kullaniriz.

int[] testScores; //declare bildiri/tanitim islemi
testScores = new int[4]; //construct array / dizi olusturma

ya da 

int [] testScores = new int[4];

Bu basit dizi olusturma islemini hemen hemen herkes bilmektedir.  Bu kodlarin anlamini biraz daha detaylica inceleyecek olursak ; Heap’te yeni bir dizi objesi olusturulur ve bu dizi objesi 4 tane elaman tutmaktadir. Onceki yazilarda inceledigimiz gibi bu elemanlar icin varsayilan deger 0 olacaktir. Hatirlayacagimiz gibi tum diziler objedir. Bu nedenle referans tipindeki testScores degiskeni Heap’teki bu objeyi gostermektedir.(refer)

one-dimentional-array-on-heap-example-tutorial

Continue reading 29 Array Construction

30 Array Initialization

Merhaba Arkadaslar,
Onceki iki yazida array declaration ve array construction konularindan bahsetmistik. Bu yazida array initialization ve hem construction hem initialization islemini beraber yaptigimiz durumlari inceleyecegiz.

Array Initialization ‘ dan kasit dizinin icerisine “bir seyler” eklemek, doldurmaktir.  Bu “bir seyler” hem primitive degerler olacagi gibi , objeleri tutan referans degiskenleri de olabilir.

Animal [] pets = new Animal[3];

3 tane Animal referans tipinde ve null degerli elemanimiz ve Heap’te 1 tane array objemiz olustu. Burada Animal objesi yok ! Burasi onemli bir nokta.

pets[0]= new Animal();
pets[1]= new Animal();
pets[2]= new Animal();

Continue reading 30 Array Initialization

28 Array Declaration

Merhaba Arkadaslar,
Bir kac yazi boyunca Java’da Array/Dizi konusundan bahsedecegim. Aslinda programlama ile biraz ugrasan herkes diziler konusunda az cok fikir sahibi olmustur. Zaten buraya kadar da dizileri ara ara kullandik. Burada biraz daha detaylica inceleyip ince noktalarini gorecegiz.
Genel olarak 3 nokta uzerinde duracagim;

  • Bir array/dizi referans degiskeni nasil tanimlariz (declare)
  • Bir array/dizi objesi nasil olustururuz (construct)
  • Bir array/diziye eleman eklemek, doldurmak (initialize)

Burada bir “declare” kismini inceleyecegiz Continue reading 28 Array Declaration