- Array reference deyiseni nece duzelir ( declare )
- Array obyekti nece duzedilir ( construct )
- Array -e elementlerin yerlesdirilmesi ( initialize )
int [] key; // bu tovsiye olunur
int key []; // legal amma az oxunan
Yuxarida Array primitive kimi deklare olunub.Biz hemcinin multidimensional arrayleride deklare ede bilerik,hansiki array-in arrayidir.
String [] [] [] name; // tovsiye olunur
String [] name [] ; // legaldir bele yazilis.
Legal olmasi dogru olmasi menasina gelmir.Declarationda array-in olcusunu daxil etmek legal deyil.
int [5] scores; // compile olmayacaq.
Constructing:
Yeni arrayin heap-de objesini yaratmaqdir.(hansiki butun obyektler orada yasayir) new ile yaradilir array tipin uzerinde.Objeni yaradanda Java bilmelidir heap-de ne qeder bos sahe bolusdurulmelidir.Ona gorede creation time zamaninda array-in size-ni mueyyen etmek lazimdir.Arraylarin size-i arraylerin tutacaqlari elementlerin sayidir.
int [] test=new int[4];
Burada array obyekti 4 element tutur-default deyeri 0 olan int tipinde elementleri saxlayir.
Thread [] a=new Thread[5];
Burada biz Thread obyektini yaratmiriq,Yegane yaratdigimiz obyekt 5 Thread referance deyiseni tutur.Ancaq Thread obyektleri yaradilmir veya bu referanslara menimsedilmir.
a[0]=" "; bu kimi hec 1 obyekte menimsedilmir.eger 1 referance obyekte menimsedilmirse demeli null olur.
int [] a=new int [] ; // compile olmayacaq,cunki size verilmeyib.
int [] [] myArray=new int [3] [ ];
Bu int tipinin multidimensional array-i int [] array-nin obyektidir.Burada diqqet yetirmek lazimdirki 1ci [] -na size verilir.Cunki JVM obyektin olcusunu bilmelidir onu a deyisenine menimsetmek ucun.
Bu misalda myArray referansi heap-de 3 yere bolunur yeni 3 yer tutur. 0,1,2.
Bu bolunmus 3 hisseden 1ciye [] -dan 2 element uygun gelir,2ciye 3 element uygun gelir,3cu ise null qalir.
int[ ][ ] myArray = new int[3][ ];
myArray[0] = new int[2];
myArray[0][0] = 6;
myArray[0][1] = 7;
myArray[1] = new int[3];
myArray[1][0] = 9;
myArray[1][1] = 8;
myArray[1][2] = 5;
int a[]=new int[5];
burada a[5] yazsaq exception verecek.Cunki index 0-dan baslayir.
int[] a = new int[3];
int b = -7;
a[b] = 4;
System.out.println(a[b]); // buradada exception verecek.
Arraylerde length Stringlerdekinden ferqlenir.Stringlerde length() bele,Arraylerde ise length olur.() olmur.
length deyirki array ne qeder element tutur.ancaq bize demir bu elementler neye menimsedilib.
int [] a=new int [] {2,4,6};
Bu anonyms array-dir.Bele array-lerde size-i mueyyen etmirik.Cunki burada size 2,4,6 ile mueyyen olunurki 3 dur.
int [] a=new [] int{2,4,6}; yazmaq duzgun olmaz.
Eger
int [] a=new int[3]{7,8,9}; yazsam xeta verecek.cunki yuxarida dedikki { } arasinda , ile ayrilan reqemler size-i gosterir.size-i 3 yazmaq veya bu formada yazmaq eyni seydir.
Meselen int tipinde olan 1 array 32 bit deyerinde ozune uygun olan deyeri tuta biler.Meselen:
int a [] new int[4] ;
byte b=4;
char c=' d ';
short s=7;
a[0]=b;
a[1]=c;
a[2]=s;
Cunki byte,char,short int-den balacadirlar.
class Car{ }
class Subaru extends Car{ }
Car [] c={new Subaru(),new Car()};
Burada Car super class oldugu ucun Subaru ve Car obyektlerini Car tipinde array-icinde qoya bilerik her 2sinde.Eger interface implements edirse o zaman oda bu kimi olur.
interface Sporty { }
class Ferrari implements Sporty extends Car{ }
Sporty [] s=new Sporty[3];
s[0]=new Ferrari();
s[1]=new Car(); yazsam xeta verecek.Cunki Car Sporty interface-ni implement etmir.Yeni burada IS-A elaqesi odenmir.
public static void main(String[] args) {
int b[];
int a[] = new int[4];
b=a;
char [] c=new char[2];
b=c; burada xeta verecek.Cunki array-lerde casting sohbeti yoxdur.char-->int cevrilmesi movcur deyil.
}
Eger 1 class digerini extends edirse o zaman hemin super class-in referansi sub class tipinde olan arrayin referancina menimsedile biler.Eger extends etmeden menimsedilirse o zaman xeta verecek.Cunki IS-A elaqesi pozulacaq.IS-A elaqesi instanceof operatoru vasitesile mueyyen edilir.Bu qayda (menimsetme) interface-in implement etdiyi classlardada ozunu dogruldur.
1olculu array 2 olculu array-e menimsedile bilmez.
int a[] [] =new int[3][];
int [] b=new int[2];
int c=7;
a[0]=c; // bu dogru deyil.cunki burada int array teleb edir int deyil.
a[0]=b; // bu ise dogrudur.yeni 3 hisseye bolunmus array-in 1ci deyeri 2 reqem tutur.
Hiç yorum yok:
Yorum Gönder