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();
Bu kod parcasinda 3 tane Animal objesi olusturuyoruz ve ilgili indekslere atama islemini gerceklestiriyoruz.
pets[3]= new Animal(); //ArrayIndexOutOfBoundsException int[] x = new int [5]; x[5] =10; //ArrayIndexOutOfBoundsException int[] z = new int [2]; int y=-3; z[y]= 4; //ArrayIndexOutOfBoundsException
Yukaridaki ornekler calisma zamaninda (runtime) , ArrayIndexOutOfBoundsException hatasi verecektir. Dizi indekslerinin Java’da 0 dan basladigini ve negatif deger alamayacagini belirmekte fayda var.
Donguler ile ilk deger atama islemini (Initialization) gerceklestirebiliriz.
Array objeleri length adinda public bir degiskene sahiptir. length degiskeni , array’in kactane eleman tuttugunu bize soyler bu elamanlarin initialize edilip edilmedigi bilgisini bize vermez.
int[] number = new int[5]; System.out.println(number.length); for (int i = 0; i < number.length; i++) { number[i] = i * 2; } System.out.println(number.length);
Declare, construct ve initialize islemini tek statement(ifade) ile de yapabiliriz.
int [] ages = {10,15,20}; // ages adinda "int" tipinde bir array referans degiskeni tanimladik //3 elemana sahip bir array olusturduk //array'in elemanlarini 5,10,15 ile doldurduk //Heap'te olusan array objesini ages degiskenine atadik. int ages; ages = {10,15,20}; //compile error
Benzer sekilde cok boyutlu diziler icin de gecerlidir ,
int[][] scores = { { 2, 4, 5 }, { 10, 20, 3, 9 }, { 4 }, {} };
Yukaridaki kod Heapte 5 tane obje olusturur. Bunlardan ilki ,scores degiskeninin tuttugu cokboyutlu dizinin objesidir. (array of int arrays) . Her bir { } yeni bir array’i temsil eder, her array bir obje oldugu icin dolayisiyla 4 adet objede burada olusur.
Bir diger yontem olarak anonymous array initialization(ilk deger atama) yapisi kullanilabilir ;
int [] ages2 ; ages2 = new int[]{20,30,40,50};
anonymous array olustururken , dizi boyutu belirmek derleme hatasina yol acar.
int [] ages2 ; ages2 = new int[4]{20,30,40,50}; //compile error