30 Nisan 2012 Pazartesi

FORMATTER VE SCANNER SINIFI ILE FILE YAZMA VE OXUMA


 StringBuffer sb = new StringBuffer();
        Scanner sc = new Scanner(System.in);
        System.out.println("yaz:");
        System.out.println();
        System.out.println("ad:");
        sb.append(sc.next());
        File file = new File("hale.txt");
        FileWriter fw = new FileWriter(file);
        Formatter yaz = new Formatter(fw);
        yaz.format("%s", sb);
        yaz.close();
        Scanner oxu=new Scanner(file);
        while(oxu.hasNext()){
            System.out.println(oxu.nextLine());
        }

SCANNER SINIFI ILE FILE OXUMA


 File file = new File("hale.txt");
        try {
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

20 Nisan 2012 Cuma

JAVADA EXCEPTIONLAR

Calisma zamani gozlenilmeden 1 xeta yaranmasina exception deyilir.1 exception-in yaradilib programin icerisine atilmasi emeliyyatina throwing deyilir.Yaranan 1 exceptionu tutub problemin hell olmasi ise catching adlanir.Exceptionu tutmaga calisan kod blogu catch blok adlanir.1 Exception yarananda yaddasin heap hissesinde new() keywordu ile yaradilir.Yaranan bu exception obyektinin icerisine xetanin yarandigi setir yerlesdirilir.Exceptionda olan finally metodu xeta olmasina baxmayaraq calisacaq hissedir.Eger try bloqunda return ifadesi varsa return evvel execute olunur ve sonra ise finally execute olunur.Eger exit() cagirilsa o zaman finally bloguna girilmez.
1 class-da try{} blogu catch ve finally olmadan yazilsa xeta verecek.Eger try ve catch bloglari arasina her hansi 1 kod setiri yazilsa xeta verecek.meselen:
try{
}
System.out.print("hello");
catch(Exception e){
}

Exceptionlar java.langg.Exceptionun subclasslaridirlar.Throwable Exceptionun super classidir,Object ise hamisinin super class-dir.
Throwable 2 yere bolunur:

  • Error
  • Exception
Error xususile sistem problemlerile bagli olur ve onlarin qarsisini almaq cox cetindir ve hardasa imkansizdir.
Exceptionlar 2 yere bolunr:

  • Checked exception
  • Unchecked exception veya Runtime Exception.
Checked Exceptionlar:

  • ClassBotFoundException
  • IOException buda 2 yere bolunur: 1) EOFException ve 2)FileNotFoundException
  • ParseException
Unchecked veya Runtime Exceptionlar ise:

  • ArithmeticException
  • ClassCastException
  • IllegalArgumentException buda 2 yere bolunur:1) IllegalThreadStateException ve 2) NumberFormatException
  • IndexOutOfBoundsException buda 2 yere bolunur:1)StringIndexBoundsException ve 2) ArrayIndexOutOfBoundsException
  • NegativeArraySizeException
  • NullPointerException
  • SecurityException
Eger 1 Exceptionun sub classlari varsa o zaman try catch bloqlarin yazanda 1ci catch bloqunda o exceptionun sub-i sonra ise super-i gelmelidir.Eger eksine olsa Xeta verecek.Meselen:
try{ }
catch(IOException e){}
catch(FileNotFoundException ex) { }        // burada xeta verecek.Cunki 1ci subi sonra superi gelmelidi.balacadan boyuye.

Eger 1 metodun basinda throws yazilibsa bu o demekdirki bu metodu kim istifade etse try ve catch atmalidir.
void doMore() throws IOException { ... }
bu kodu istifade edende mutleq try ve catch atilmalidir.
RuntimeException ,Error ve onlarin butun sublari unchecked exceptiondurlar. ve onlari mueyyen etmek veya handle etmek olmur.Yerde qalan diger exceptionlar ise checked olurlar ve onlar java.lang.RuntimeException-dan toremirler.Checked Exceptionlar kodda istenilen yerde tutula bilerler.Eger 1 checked exception atan metod cagirilirsa ve tutulmursa o zaman kod compile olmayacaq.

Exceptionlar JVM (yeni runtime) ve Programmatic ( yeni compiler) exception olmaqla 2 yere bolunurler.
JVM exceptionlar JVM terefinden atilir.
Programmatic Exceptionlar ise API programmerler veya applicationlar terefinden atilir.
Programmatical exceptionlar asagidakilardir:

  • AssertionError
  • NumberFormatExcepption
  • IllegalArgumentException
  • IllegalStateException
Yerde qalanlarin hamisi JVM exceptionlardir.

19 Nisan 2012 Perşembe

JAVADA GARBAGE COLLECTIONS

Yaddas idaresi ( Memory management ) applicationlarin 1 coxunda kritik meselelerdendir.Javanin Garbage Collectoru yaddas idaresinin avtomatik helli yolunu temin edir.Yaddasin 1 hissesi olan Heap Java obyektlerinin yasadigi 1 yerdir hansiki garbage collector proseslerinde eas hisseni teskil edir.garbage collector run olanda onun esas meqsedi obyektleri tapmaq ve silmekdir hansiki hemin obyektlere artiq catmaq mumkun deyil.GC JVM-in controlu altindadir.JVM qerara alir GC-nin run olunma zamanini.GC yaddas azalmaga dogru icra olundugu zaman run olunur.Her 1 java programinin 1den cox thread-leri var.Her 1 thread-in ozunun sexsi balaca icra olunma stack-i var.Normalda en azi 1 thread Java programinda run olmaga sebeb olur 1i stack-in dibinde yerlesen main() metodudur.Her 1 thread-in ozunemexsus heyat dovriyesi var.Thread-ler sag veya olu ola biler.Obyektler yasamayan thread onu access edende GC ucun qebul oluna bilendir.Yeni  eligible-dir.GC yalniz String olmayan obyektler ucun tetbiq olunur.Teriflere esaslanaraq GC bezi bilinmeyen emeliyyatlar edir ve yasayan thread terefinden reached oluna bilmeyen obyekti tapanda o bu obyekti eligible kimi hesab edir silinmek ucun.ve hetta onu silede biler.Eger bizim programimizda obyekte istinad eden referance deyisenimiz varsa ve o referance deyiseni yasayan thread terefinden available-dirsa onda o obyekt reachable hesab olunur.GC yaddasdan obyektleri silmeye cehd edir onlardan istifade olunmayanda.Eger coxlu yasayan obyektler olsa programimizda sistemimiz yaddasi tukendirer.

  public static void main(String[] args) {
StringBuffer sb=new StringBuffer("Hale");
System.out.print(sb);     // StringBuffer obyekti eligible deyil.
sb=null;                         // StringBuffer obyekti eligible-dir.

Runtime class-i yegane objesi (Singleton) olan xususi 1 class-dir her 1 main program ucun.Runtime obyekti JVM ile bilavasite elaqeni temin edir.Runtime obyektini almaq ucun Runtime.getRuntime() metodunu istifade etmek lazimdir,hansiki Singleton qaytarir.GC-ni cagirmaq ucun gc() metodu istifade edilir.Bu metodu System class-i uzerindende cagirmaq olar,hansiki static olan 1 metoddur.
System.gc();

public class CheckGC {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.println(“Total JVM memory: ” + rt.totalMemory());
System.out.println(“Before Memory = ” + rt.freeMemory());
Date d = null;
for (int i = 0; i < 10000; i++) {
d = new Date();
d  = null;
}
System.out.println(“After Memory = ” + rt.freeMemory());
System.gc();
System.out.println(“After GC Memory = “+ rt.freeMemory());
}
}
//Console
Total JVM memory: 5177344
Before Memory = 4660704
After Memory = 4403968
After GC Memory = 5011864

Java Gc terefinden obyektleri silmemisden evvel finalize () adli metodu istifade edir.hansiki butun classlar Obyekt class-dan onu inherit edir.Obyekt class-daki finalize () metodu 1 objenin referansi qalmadigi zaman gc terefinden cagirilir.System class-daki gc() metodu GC-ni calisdirir.System.gc() cagirilmasi ile Runtime.getRuntime().gc() cagirilmasi eynidir.Ancaq finalize() metodunu override etmek meslehet gorulmur.

Umumiyyetle GC-nin avantaji :

  • Programci yaddas idaresinden asili olmadan program yazabiler.
  • yaddas idaresi ucbatindan program cokmez.
dezavantaji ise:

  • Sisteme cox yuk getirir.
  • GC-nin ne zaman calisacagi tam olaraq bilinmir.

JAVADA ARRAY DECLARATION,CONSTRUCTION AND INITIALIZATION

Javada Array-ler eyni tipin coxlu deyisenlerini saxlayan obyektler-dir.Array-ler primitive veya obyekt referanslarinin her 1ini tuta biler,ancaq array-in ozu hemise heap hissede obyekt olacaq,hetta eger array primitive elementleri tutursa bele.Yeni primitive tiplerin arraylerin yarada bilerik.Burada 3 seyi bilmeliyik:

  • Array reference deyiseni nece duzelir ( declare )
  • Array obyekti nece duzedilir ( construct )
  • Array -e elementlerin yerlesdirilmesi ( initialize )
Declare:
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.

JAVADA PRIMITIVE TIPLERIN MENIMSEDILMESI

1 primitive deyisenin basqasina menimsedilmesi o demekdirki,1 deyisenin terkibinin basqasinin icinde copy-si var.Object referans deyisenlerde bu yolla isleyirler.Meselen a referansi b referansina menimsedilerse a-nin terkibi copy olunar yeni copyasi b-de yerlesdiriler.Eger yeni copyada her hansi 1 deyisiklik olarsa bu deyisiklik avtomatik olaraq a-yada kececek ve a b-nin terkibini tutacaq.Meselen:
class Test{
 public static void main(String[] args) {
Test t=new Test(5,10);
System.out.print(a.height);    // 10
Test w=t;
w.height=30;
System.out.print(a.height);    // 30
}
}  

a b-ye menimsedildi ilk once.sonra b-de deyisiklik oldugu zaman bu a-da da bas verdi.
Ancaq Stringlerde ferqli olur.a deyisende b ona uygun deyismir.Meselen:
String x="Java";
String y=x;
System.out.print(y);    //Java
x=x+"Bean";
System.out.print(y);   //Java
}
}
Burada x deyisende y ona uygun deyismir.Cunki String obyektleri immutable-dir, yeni deyismezdir.

18 Nisan 2012 Çarşamba

JAVADA VARIABLES SCOPE

Javada 4 esas scope var:

  • Static variables- cox uzun scope-lari var.Onlar class yuklenende yaradilir ve JVM-de class yuklenene qeder sag salamat qalir.Static deyisenler class ilk yuklenende run olunur.sonra ise initializing blocklar yeni {} en sonra ise constructor run olunur.2ci yuklenmede ise class-in artiq static run olmur digerleri ardicilliqla yuxaridan asagiya dogru run olunur.Eger static block icerisinde her hansi 1 xeta bas vererse EXCEPTIONININITIALIZATIONERROR adlanan error cixacaq.Meselen:
  • static int [] a=new int[5];
          static { x[5]=10; }   // yazsam run zamani xeta verecek.Cunki limiti kecmis oluram burda.
  • Instance variables- diger 1 uzun scope-u olan deyisenlerdir.Onlar yeni class obyekti yaradilanda yaradilir ve bu obyekt silinene qeder yasayirlar.Instance deyisenler member deyisenlerde adlandirilirlar.Bu deyisenler metodun icinde,constructor veya initializer block icinde yaranmirlar.Instance deyisenler ilk yaradilanda default deyerlerine menimsedilir.boolean-in default deyeri false-dur.byte,short,int,long -0,obje ve String -null,char ise -'\u000' -dir.
  • Local variables- metodun icinde yaradilan deyisenlerdir.metod stack-de qalana qeder yasayirlar.local deyisenler sag qala bilerler "scope-un xaricinde" ola bilerler.Local deyisenler bezen stack,temporary,automatic veya metod deyisenleri adlandirilirlar.Local deyisenler mutleq deyere menimsedilmelidirler.eger deyere menimsedilmeden istifade olunsalar compile error verecek.Menimsedilme vacib deyil kod olan setirde olsun basqa setirdede ola biler.Java local deyisenlere defaul deyer vermir.Bundan elave olaraq metod icinde teyin olunan deyisenler hec 1 modifier qebul etmir ve static olmur.yalniz final ola biler i fsyo.
  • Block variables- code blocklari icra olunan zaman yasayirlar.
class Test{
int x=10;
public static void main(String [] args ){
x++;      // compile olmayacaq.Cunki x instance deyisendir ve objeye aid olur.obje yaradilmadigi ucun istifade oluna bilmez
}
}


void go(){
for(int a=0;a<5;a++){
boolean test=false;
if(a==3){
test=true;
break;
}
}
System.out.print(test);             // burada test deyisenini istifade etsek xeta  alariq.Cunki test deyiseni scope-un xaricinde yerlesir.Code block tamamlandiqdan sonra block deyisenini istifade elemeye cehd gosterdiyimiz ucun xeta aldiq.           cannot find symbol-yeni simvolu tapa bilmir.

void go(){
int y=5;
go2();
y++;
}
void go2(){
y++;    // burada y local deyisen oldugu ucun istifade oluna bilmir.  hemdeki static olmayan 1 metod basqa yerden cagirila bilmez.
}
}
}

public class Test{
public static void main(String [] args){
Test t;
if(t==null) {                                 //  xeta verecek.Cunki t hec 1 seye menimsedilmeden istifade olunur burda.Compiler-a gore null-da 1 deyerdir.null referance uzerinden dot( .) operatoru ile hec 1 sey etmek olmaz.null referance deyere menimsedilmeyen referance ile eyni deyildir.
System.out.print("t is a null");
}

Array-lerde ise local deyisen veya instance deyisen kimi deklare olunmasindan asili olmayaraq default deyerler verilir.Ancaq metodun icinde array-in referansini onun objesine menimsetmesem o zaman xeta verecek.Mutleq referansi ya null yada hansi tipdedise onun obyektine menimsetmek zorundayiq.

JAVADA LITERALS

Javada integer reqemler 3 yolla temsil olunur:

  • Decimal (base 10)
  • Octal (base 8)
  • Hexadecimal ( base 16)
Decimal Literallar-normal yazilan reqemlerdir.yeni hec 1 prefix on sekilcisi qebul etmirler.
                        int a=343;
                        int b=25,656; // xeta verecek cunki , var.
Octal Literallar-Burada reqemler yalniz 0-8 araliginda olur ve on sekilci kimi 0 qebul edir.Meselen:
                        int a=06;
                        int b=07;
                        int c=010;            // int c=08; yazsaydim xeta verecekdi.
 Octallarin hesablanma qaydalari:
int a=018; yazsam yene xeta verecek cunki terkibinde 8 var ,Dedikki ancaq 8-e qeder olan reqemleri qebul edir.
public class Test{
public static void main(String [] args){
int a=017;
System.out.print(a);
}
}
CONSOLE: 15.
Bunlari hesablayanda ilk once 0-dan sagda yerlesen reqeme baxilir.eger 0-dan sonra 1-dirse bu o demekdirki 1-dene 8 olmalidi.eger 2-dise 2-dene 8 yeni 16 olmalidi ve s.Ondan sonra yerlesen reqem ise bu 8,16 ve s.-nin uzerine elave olunur.bu numunemizde 0-dan sonra 1 gelib.Bu o demekdirki 1 dene 8 var.sonra 7 geldiyi ucun 7+8=15 olub.Bu qeder sade.

Hexadecimal Literals-16 ferqli simvol istifade ederek qurulub.0-dan 16-ya qeder olan hexadecimal reqemler asagidaki kimi olur.
0 1 2 3 4 5 6 7 8 9 a b c d e f
yeni 9-dan boyuk sayilar A B C D E F herfleri ile yazilir.Java boyuk veya balaca herfleri istifade edir extra reqemler ucun.0x veya 0X on sekilci kimi elave olunur.Meselen:
              int a=0X0001;
              int b=0x7fffffff;
              int z=0XDeadCdfe;
Eger yuxarida gosterilen herfler-den basqa 1 herf elave etsem o zaman xeta verecek.yeni:
              int a=0X987UYtr;               // xet verecek.Cunki UYtr herfleri a-e veya A-E araligina daxil deyildir.
Yuxarida dediklerimiz default olaraq int kimi mueyyen olunur.,amma onlar hemcinin long kimide mueyyen oluna biler ve sonuna suffix kimi l veya L herfi elave oluna biler.
                long a=0XFFFL;
                long b=11111L;

Floating-Point Literals-Float-i yazanda mutleq axirinda F veya f suffix qoyulmalidi.Eger qoyulmasa bu compile error verecek.Yeni o double kimi tesevvur oluncaq ve deyer itkisi bas verecek.
float f=23.647747;           // Compile error,guman olunurki deyer itkisi ola biler.
float f=23.46736F;            // OK,Cunki F suffixi var.
Double-da ise sonuna suffix kimi D veya d qoyulada biler qoyulmayada biler.
double d=3636.93838;
double d=737.737732D;        //  teleb olunmur olada biler olmayada biler.

Boolean Literals-boolean deyerler yalniz true ve false ola biler.
boolean a=true;        // Legal;
boolean b=0;           // Compile error.

Char Literals-char deyerler  ' ' icinde yazilir.(single quotes-tek dirnaq).cut dirnaqda yazilsa xeta verece
char a='a';
char b='@';
Unicode deyerleride istifade etmek olar.prefix kimi qarsisina \ u yazmaqla.
char a='\u004E';             // N herfi
Character-ler 16 bitlik yer tuturlar.Yeni 65535-e qeder olan reqemler ala bilerler hemcinin.
char a=0X987;                      // hexadecimal literal
char b=983;                             // int literal;
char c=(char)70.000;                //   burada cast teleb olunur.Cunki 70.000 16-bitlik zenciri(65535) kecir.
char a=(char)-98;                       //  gulmelidir ancaq legaldir.
char c=' \" ';                                 // cut dirnaq;( " )
char d=' \n ';                                     // yeni setir.

Primitive Assignments

byte a=8;
byte b=8;
byte c=a+b;               //  bu kod normalda sehvsiz gorunur.Ancaq compile olmayacaq.Cunki a+b toplananda cixilanda bolunende ve vurulanda int kimi ozunu aparir.ona gore mutleq cast emeliyyati yerine yetirilmelidir.
byte c=(byte)a+b;

Umumiyyetle int-den balaca olan tiplerin hamisinda bu hal bas verir.(byte,short,char)  

 char a='o';
  char b='g';
  char v=a+b;    //  xeta verecek,cahr-lari toplayanda onlari int kimi toplayir.ona gore cast olmalidi.
char v=(char) a+b;
Integer deyerler explicitly castt olmadan double-a menimsedile biler.Cunki her hansi 1 integer deyer 64 bit double tuta biler.Bundan elave olaraq double informasiyanin 1 cox hissesini tuta biler.
double a=100L;

int a=227.977;           // illegaldir.cunki double--> int   64-->32
bunun ucun cast etmek lazimdir.
int a=(int ) 227.977;    // legal cast
netice ise tam hisse olaraq cixacaq.yeni 227 cap olunacaq.yeni burada deyer itkisi bas verecek.

her1 floating point deyerler implicitly olaraq double-dir.float deyil.meselen; 32.3 double hesab edilir.eger bu double-i float-a menimsetmek istesek o zaman mutleq onu floata cast etmek lazimdir.  64-->32
float f=(float) 32.3;
float f=32.3f;
float f=32.3F;

Eger byte b=5;
b+=5; yazsaq bu zaman hec 1 problem olmaz.netice 10 olar.
byte b=5;
b=(byte ) (b+5);  yazsaq ise compile olmayacaq cast olmadan.

+=, -=,*= , /= bunlar implicitly cast edir.

JAVADA STACK VE HEAP

Javada metodlar,deyisenler,referanslar,obyektler hamisi Ramda mueyyen yer tuturlar.Yaddas 3 hisseden ibaretdir:

  • Code segment
  • Stack segment
  • Heap segment
Code segment-programin compiler oluna bilen kodlarinin yerlesdiyi hissedi.
Stack segment-local deyisenlerin,metodlarin,referanslarin yerlesdiyi hissedir.
Heap segment ise instance deyisenlerin ve obyektlerin yerlesdiyi hissedir.


class Test{ }

class Run {
Test t;                                   // instance variable
String name;                         // instance variable
public static void main(String [] args){
Run r;                     // local variable: r
r=new Run();
r.go(r);
}

void go(Run run){                 // local varibale: run
t=new Test();
run.setName("Hale");
}
void setName(String rName){                // local variable: rName
name=rName;
}
}
Yuxarida yazdigim kodu 1-1 arasdiraqki ne nedi.Basladiq:
-main() - metodu stack hissede yerlesir.
-Referance deyisen olan r stack hissede yaradilir,ancaq Run-in obyekti hele yoxdur.
-Sonra yeni Run obyekti yaradilir ve r referansina menimsedilir.
-go() -metodu stack hissede yerlesir,r parametri ile local deyisen kimi.
-new Test() objesi heapde yaradilir ve menimsedilir Test class-nin instance deyiseni olan t-ye.
-setName() stack hisseye elave olunur.

17 Nisan 2012 Salı

JAVADA COUPLING VE COHESION

Coupling ve Cohesion OOP dizayn-nin keyfiyyeti ile islenilmelidir.
Cohesion nedir?
Cohesion-1 class-in oz isi ucun ne qeder well-suited yazilmasinin meyaridir.Cohesion high cohesion ve low cohesion olmaq uzere 2 yere ayrilir.High cohesion-da class-lar her melumat ucun ayri yazilir ve sonra bu class-lar arasinda elaqe yaradilir.Yeni class verilmis meqsed ucun butun OOP prinsiplerini nezere alaraq duzgun yazilib.Meselen:
class ConnectToRDBMS{
DBconnection getRDBMS() { }
}

class FileSaver {
SaveOptions getFilesaveOptions() { }
}
Bu class-lar daha cohesive-dir.yeni elaqeledir.
Low cohesion-da ise butun melumatlar 1 class-da cemlenir.Bu High Cohesion-un eksidir.
class BudgetReport{
void connecttoRDBMS () { }
void saveToFile ( )  { }
}

Coupling ise - 2 class-in 1-1i haqqinda ne qeder bilmesinin meyaridir.Loose coupling ve Tight Coupling kimi novleri vardir.
Loose coupling 2 class-in 1-1i haqqinda ancaq API vasitesile elaqe qurmasinin gostericisi kimi qebul ede bilerik.Bu cox yaxsi gostericidi class ucun.Arzu olunan haldir.Hansiki class-lar well encapsulated-dir.1-1i haqqinda cox az melumata sahibdirler. Bunun eksi ise Tight Coupling -di.Hansiki class ucun menfi gostericidi.

JAVADA OVERRIDING VE OVERLOADING

Override inheritance movzusun yazanda demisdim nedi.super class-da olan 1 metodu sub class-da yazib icini deyisdirmek.Abstract metodlar mutleq sub class terefinden overriden olunmalidir.

public class Animal{
public void eat(){
System.out.print("Animal");
}
}
public class Horse extends Animal{
public void eat(){
System.out.print("Horse");
}
public void buck(){
System.out.print("Horse buck");
}
}
public class Test {
public static void main(String [] args){
Animal a=new Animal();
Animal b=new Horse();
a.eat();            //    burada eat() metodu Animal class-dakin cagirir.
b.eat();            // burada ise eat() metodu Horse class-dakin cagirir.Cunki metod artiq override olunub.

Animal c=new Horse();
c.burk();  yazsaq burada xeta verecek.Cunki Animal class-da buck() adli 1 metod yoxdur.Polymorphism dediyimiz kimi ancaq eyni adli metodlara aid edilir.yeni 1 metod hem super class-da hemde sub class-da olmalidir.eger ferqli 1 metod olarsa bunu polymorhism-e aid etmek olmaz.
Note: 

  • private
  • default
  • protected
  • public
yeni public olan 1 metodu override edib private etmek olmaz veya basqalari.

Override olan 1 metodun  override olmus 1 metoddan daha cox mehdudlasdirici modifier-i ola bilmez.
Override zamani asagidaki sertler odenilmelidir:

  • Argument list override olmus metodla uygun olmalidir.Eger onlar uygun olmasa , bu overloading olar.
  • Return tip eyni olmalidir.
  • Override olunan metodda Access level cox mehdudlasdirici ola bilmez override etmis metoddan ferqli olaraq.
  • 1 az mehdudlasdirici ola biler.
  • Override olunan 1 metod unchecked(runtime exception)ata biler.
  • Override olunan 1 metod checked exception atmamalidir.
  • Final olan 1 metod override oluna bilmez.
  • Static olan 1 metod override oluna bilmez.
  • Eger 1 metod inherit olunmursa o zaman onu override ede bilmerik.
public class Animal{
private void eat(){}
}

public class Horse extends Animal{ }

public class test{
public static void main( String [] args){
Horse h=new Horse();
h.eat();                                          //      legal deyil.Cunki Horse eat() metodunu override etmeyib.private olan 1 metod ancaq oz class-nin icindekilere gorunurdu.
Eger hem super class-daki hemdeki sub class-daki metodu 1-likde isletmek istesek o zaman
public class Test{
public void eat(){
super.eat();
}
}
bu zaman 1 ci super class-daki sonra ise sub class-daki metod calisacaqdir.Eger metod private olsa bu zaman super yazanda hemin metod xeta verecek.Bununda sebebi private olan 1 metod veya deyisenin yalniz oz class-i icindekilere gorunmesidi.

public class Animal{
public void eat() throws Exception{ }
}

public class Horse{
public void eat() { }
}

Burada run class-da Animaldaki eat() metodu error verecek.


public class Animal{
public void eat() { }
}

public class Horse{
public void eat()throws Exception { }    // burda ise hemin anda xeta verecek.run class-da deyil.Umumiyyetle bu hissede check Exception yazmaq duzgun deyil cunki hemin anda xeta verecek.
}
Note:  Override zamani metod check atsa run time vaxti xeta verecek.hem ozunde olan metod hemdeki sub-inda olan metod.Metodlar ancaq uncheck exception atmalidirlar.Eger super class 1 uncheck exception atirsa sub class ya hecne atmamali,ya hemin exceptionu atmali yadaki o exceptionun sub classni atmalidir.Ancaq Exceptionun super class-i kimi Exception goturulse bu hemin anda xeta verecek.Cunki icinde hem uncheck hemde check exception olur.

Indi ise overloadingden danismaq isterdim.
Overloaded metodlar class-da eyni adli metodlari yeniden istifade etmeye icaze verir.Amma muxtelif argumentlerle.
Burada qaydalar cox sadedir:

  • Overload olunmus metodlarin argument listleri muxtelif olmalidi.
  • Overload olunmus metodlarin return tipleri deyisken ola biler.
  • Overload olunmus metodlar access modifier-i deyise biler.
  • Overload olunmus metodlar check exception ata bilerler.
  • 1 metod eyni class-da veya onun sub class-da overload oluna biler.



public class Animal{
public void eat(int y,String s) { }
}

public class Horse{
public void eat(int y,long s) throws IOException{ }    //   override-dan ferqli olaraq check ex.ata biler.Ancaq 1 ferq xeta burda deyilde run zamani olacaq.
}

Animal a=new Cat();
Burada a -referans tipidir.mueyyen edir hansi overload olunmus versiyanin secildiyini.(argument liste esaslanaraq).Compile vaxti bas verir.Overloaded olunmus metodda.
Burada new Cat();  obje tipidir.Basqa sozle,heap-de olan heqiqi objenin tipi.mueyyen edir hansi metodun secildiyin. Runtime vaxti bas verir.Override olunmus metodda.

JAVADA ENCAPSULATION

Bunu yazmadan evvel ilk once OOP haqqinda melumat vermek isterdim.OOP(Object Oriented Programming) gercek heyatdaki obyektleri ve onlari ifade etmek ucun islenir.OOP-de programcinin ilk evvel etmesi lazim olan mueyyen 1 programi yazmaq ucun obyektleri mueyyen etmesi ve bunlar arasindaki elaqeleri teyin etmesidir.OOP-nin 2 esas  ustunluyu vardir: flexibility(elastiklik) ve maintability(yararliliq).Ancaq bunlar avtomatik olaraq OOP ile gelmir.Bunlari etmek ucun gerek nese edesen.Sen ele 1 yolla classlar ve kodlar yazmalisanki flexibility ve maintability-ni desteklesin.1sirketle elaqeli olan 1 program yazanda ,meselen,Department,Manager,Customer kimi class-lar yaziriq.Bunlara gercek heyatdaki qarsiliqlarina uygun olaraq funksiyalar elave olunur.OOP 3 hisseden ibaretdir:

  • Encapsulation
  • Inheritance
  • Polymorphism
Ilk once Encapsulation haqqinda yazmaq isterdim.
Encapsulation-1 obyektin bezi ozellik ve funksiyalarinin digerlerinden saxlanabilmesi,ve onlara access-in mehdudlasdirilmasidir.Eger sen maintability,flexibility ve extensibility isteyirsense o zaman dizaynini encapsulation icerisine daxil etmelisen.yeni nece?
Encapsulation ile 1 sinif oz icinde olan melumatlari gizleyebiler ve qoruyabiler.Sinifin bezi ozellik ve funksiyalarina xaricden hansisa class-in acces etmesi tehlukeli ola biler.Bunun ucun biz ilk oncede
 -class-mizda olan deyiskenleri protected etmeliyik.yeni deyisenleri private etmeliyik.
 -Daha sonra bu deyisenlere basqa 1 class-dan giris etmek ucun bu deyisenlere get ve setler daxil edirik.

private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}

indi ise Inheritance-e baxaq.
Inheritance Javada cox vacib olan bolmelerden biridir.yeni 1 class-in butun ozelliklerinin extends yolu ile diger class-a kecmesidir.Burada 1 class yalniz 1 class-dan toreye biler.Basqa class-lardan yox.yeni 1 usagin 1 anasi ola biler 2 veya daha cox sayda ola bilmez.

class C extends A,B { } //     olmaz.
public class Insan{ }
public class Hale extends Insan { }
Burada Insanin butun ozellikleri ve funksiyalari hamisi kalitim yolu ile Hale-ye kecdi.Burada Insan-super class,Hale ise Sub class oldu.Eger biz Super class-da olan 1 metodu deyismek istesek,onda sub class-da hemin metodu eyni sekilde yazib icindeki ,kodu override etmeliyik.ve bunun sayesinde biz super class-da olan 1 metodu redd edib sub class-daki kimi esas hala getirmis oluruq.Mes:Insanin el,ayaq,qol ve s.metodlarinin var oldugunu fikirlesirik.Biz Hale class-i deye 1 class yaradanda ve Haleni bu Insan class-dan toredende hale Insana aid olan butun xususiyyetleri almis olur.Deyekki bu metodlarin icinde olan ayaq metodu Hale-ye uygun olmayan 1 metod oldugu ucun bunu deyismek isteyirik.O ,zaman Hale class-na ayaq metodunu oldugu kimi yazib metodun icini istenildiyi kimi etdikden sonra Hale class-i ucun ayaq metodu Insan class-da redd olur,oz icindeki ayaq metodu calisir.
Deyekki Insan class-nin icini ,goz metodunu Hale class-nin icine override etdik.Override etdikde Insan class-nin icindeki goz metodu redd oldu,Hale class-nin icindeki esas oldu.Biz eyni anda her 2 -nin calismasini istesek,Hale class-daki goz metodunun qabagina super.goz(); yaziriq.Once Insan lass-nin gozunu,sonra ise Hale class-daki gozun calismasini saglayiriq.

Indi ise Polimorfizm-e baxaq.
Ilk novbede bunu bilmek lazimdirki polymorphism-in olmasi ucun kalitimin olmasi lazimdir.1 yerde polimorfizm varsa ,o yerde kalitim vardir.Polymorphism cox sekillilik demekdir.Polymorphism bu sekilde ifade olunur.

  • Super class-in referansi ile sub classlarin objelerini idare etmemize yarayir.Amma burada ilk once bu bilinmelidirki sub class-lar eyni super class terefinden toreyir ve eyni metodlari cagirmalidirki bu metodlar super class-dada olsun.
public class Insan {
el
ayaq
bas           // metodlari var.
}
public class Hale{
el
ayaq
bas
Javaci
}
Hale h=new Hale();
h.el();

Burada Hale kimi coxlu class-lar yazsaq bunlarin her-1nin referansi Ram-da xususi 1 yer tutacaq.(stack hissede).Yeni her sub class-in objesini yaradarken ayri ayri referanslar isledirik ve her class-dada eyni metodlari cagiririq.Bu numunede biz polymorphism islede bilerik.O ,zaman tek 1 referans yaradiriq ve bu referansi her sub class ucun istifade edirik.
Insan i=new Hale();
-Burada referans deyisen olan i yalniz 1 tipde ola biler ve 1 defe elan olunur.hansiki o tip hecvaxt deyise bilmez.Baxmayaraqki ,bu referansin tutdugu obje deyise biler.
-Referans burada deyisendir.ve o basqa objelere yeniden menimsedile biler.eger referans deyisen final olarsa bu zaman olmaz.
-Referans deyisen class tipi veya interface tipi kimi elan oluna biler.Eger deyisen interface tipi kimi elan olunarsa ,o interface-i implement eden bezi class-larin objelerine istinad ede biler.
Polymorphism static metodlara apply olunmur.

public class GameShape{
public void displayShape(){
System.out.print("displaying shape");
}
}

public interface Animatable {
public void animate();
}

public class PlayerPiece extends GameShape{
public void movePiece(){
System.out.print("moving");
}
}

public class Run{
public static void main(String [] main ){

PlayerPiece player=new PlayerPiece();
doShapes(player);
}
public static void doShapes(GameShape shape){
shape.displayShape();
}
}

Bu o demekdirki , GameShape shape=player;  yeni GameShape shape=new PlayerPiece(); demekdir.ve icindeki displayShape() metodun isledir.Eher override olsaydi bu metod o zaman player icindeki metod islenecekdi.
Hemcinin Object o=player; Buda eyni seydi.

public class PlayerPiece extends GameShape implements Animatable{
public void movePiece(){
System.out.print("moving");
}
public voud animate() {
System.out.print("animating");
}
}

Hemcinin Animatable mover=player;   yeni, Animatable mover=new PlayerPiece();  Cunki bu class interface implement edir.eger etmeseydi yaza bilmezdik.

Note: Polymorphism ancaq instance metodlara tetbiq olunur.deyisenlere ve static metodlara deyil.

13 Nisan 2012 Cuma

JAVADA ACCESS MODIFIERS

Javada 4 access control ( levels ) , 3 access modifiers var.


  • Access modifiers:  public , protected , private 
NOTE: Strictfp , final , abstract access modifier deyildirler.


Class yalniz public veya default ola biler. protected veya private ola bilmez.

Default access package level kimi dusunule biler.Cunki default access olan class yalniz eyni paketin icinde olan classlar terefinden gorule biler.Diger paketlerde olan classlar terefinden deyil.Meselcun:

                                       package A;
                                      class Beverage{ }
                                      package B;
                                      class Tea extends Beverage { }
NOTE: Xeta verecek.Cunki Beverage class-i Tea class-in gore bilmez.Cunki ferqli paketdedirler.
Bunun compile olmasi ucun ya gerek her iki class-i eyni paketin icine qoyam ,yadaki Beverage class-mi public edemki tea class-na gorunsun.

Public access butun classlar 1-1in gore biler hetta ferqli paketlerde olsalar bele.Bununla bele eger classlar ferqli paketde yerlessede onlari istifade etmek ucun gerek hemin class-in oldugu paketi import edek.

Eger 1 class Final olaraq mueyyen edilibse o class hec 1 class-i extend ede bilmez.eger etse xeta verer.1 class eyni anda hem final hemde abstract ola bilmez.

Abstract class-lar objesi yaradilmayan classlardir.Eger Abstract class-in objesi yaradilsa xeta verecek.Burada esas meqsed onun extend etmesidir diger classlari.Tesevvur edinki sizin 1 Car adinda class-niz var ve icerisinde umumi metodlar saxliyir.Ancaq siz istemirsiz kimse Car class-nizin objesini yaratsin.Buna gore hemin class-i abstract edirikki kimse onun objesini yarada bilmesin.Abstract class-in icinde hem is goren metodlar hemde abstract metodlar olur.eger metodun 1 denesi abstract olarsa o zaman Class avtomatik olaraq abstrac olacaqdir.Abstract metodlarin  { } olmur. ; ile bitir sonlari.tutaqki projemizde 1 database baglantimiz var ve baglandigimiz bu database-de insert,update,delete ve create metodlarini yazmaliyiq.Bu metodlar icerik olaraq hamisinda eynidir.Ancaq hansi database-e baglandigini ve her informasiyanin database ucun ferqli oldugunu nezere alaraq bele 1 sey dusundum.4 metodum is goren metodlar olmali ancaq database ile connection quran metodumun ici ise bos olmali ki , her istifadeci menim bu metodumu islederken connection metodunu doldurmali ve sonra diger metodlari istifade etmeli.Buradan basa dusuremki , menim isimi abstract class gore biler,cunki icine hem doldurmaq istediyim metodu hemde istifadecinin dolduracagi abstract metodu yaziram.
abstarct class-da polimorfizm mumkundur.1 abstract class diger 1 abstract class-i extend ede biler.Abstract metodlar ancaq public ve default olur.private static final ola bilmez.

Interface 1 class-da olmasi lazim olan metod ve propertileri tanimlayan 1 qurulusdur.Normal 1 class deyil.sadece neyin edilmesini gosterir ancaq nece edilmesini gostermir.Interface-in metodlarinin ici bos olur yeni ancaq abstract metodlar olur.Metodlari yalniz public ve abstract ola biler.Interfacein ozude public abstract olur.1 class interface-i implement eden zaman onun icindeki metodlari override etmek zorundadir.javada single inheritance movcuddur multi inheritance yox.Yeni 1 class yalniz 1 class-i extend ede biler 1den cox class-i deyil.Interface-in objesi yaradila bilmez.Interface-in constructoru yaradila bilmez.yaradilsa error verecek.Interface-in deyisenleri public static ve finaldir.ona gore hecvaxt verilen deyeri deyisdirile bilmez.deyisdirilse xeta verecek.Interface deyisenleri CONSTANTLAR adlanir .Interface 1 den cox interface extend ede biler.basqa hec 1 seyi extend ede bilmez ozunden basqa.Polimorfizm burdada gecerlidir.


Private access ancaq oz class-nin icindekilere gorunur sub class-da bele gorunmur.Private metodlar inherit oluna bilmir.cunki gorunmurler sub class-da.

Protected access default access ile demek olarki eynidir.ancaq 1 ferqi var.protected access inheritance vasitesile basqa paketde olsa bele sub class terefinden access oluna biler.Protected=Inheritance.
Subclass protected deyisen veya metodlara super class uzerinden dor( . ) operatoru ile access ede bilmez.eger etse xeta verecek.

Access modifier-ler local deyisenlere tetbiq olunmur.Onlar ancaq final ola biler.Eger local deyisen Finaldan basqa her hansi 1 sey qebul ederse o zaman error verecek.
Final olan 1 metod sub class terefinden override oluna bilmez.eger olsa error verecek.

JAVADA SOURCE FILE DECLARATION QAYDALARI

  • Source kod fayli ucun yalniz 1 public class ola biler

  • Commentler source kod fayl-da baslangic veya sonda ola biler.

  •  public class Dog{}    bunun source kodu Dog.java olur.

  •  Source kod fayl-da 1ci cergede package  ,  2ci cergede import  ,3cu cergede ise class yazilir. 
  •  Fayl-da 1 den cox public olmayan class ola biler.

  • 1 faylin icinde 1 den cox eyni adli class yazila bilmez. 

JAVADA EVENTLER

Program calisarken istifadeci terefinden programa dair gerceklesdirilen butun hereketlere "event" deyilir.
Misalcun,istifadecinin programda 1 butona click etmesi,mouse-u hereket etdirmesi,programi baglamasi ve s. sekilde istifadecinin program ile elaqesi neticesinde eventler meydana cixir.
javada 1 event gerceklesdirilerken 4 vacib faktor ortaya cixir:

  • Event source
Eventi gerceklesdiren komponentdir.Button,mouse ve s.Bu menbeler eventin objesini yaradirlar.
  • Event object
Event zamani yaradilir ve event ile elaqeli butun melumatlari icinde saxlayir.
  • Event listener
Mueyyen 1 meqsed ucun yazilmis olan listener o event gerceklesdirildiyi zaman melumatlandirilir.
  • Event handler
Event listener terefinden event tutuldugunda elaqeli kodun calisdirilacagi yerdir.

Indi 1 buton ucun butona click etme eventini yaradaq.Ilk once event source yaradilir:

                                         JButton button=new JButton();
Event source yazdiqdan sonra butona click eventini yazmaq ucun ActionListener interface-ni implement eden 1 class yazmaliyiq:

                                          class Listener implements ActionListener{
                                          //Butona click edende calisacaq metod:
                                        void actionPerformed   (ActionEvent e){
                                         //......
                                              }
                                             }
Listener class-mizi yaratdiqdan sonra classi buton objemizin ActionListenerine daxil edirik:
    
                                        button.addActionListener(new Listener() );
Butona click edildiyinde Listener class-daki actionPerformed metodu calisacaqdir.actionPerformed metoduna parametre olaraq verilen e objesi event source ile (buton) elaqeli muxtelif melumatlar verir.
 


4 Nisan 2012 Çarşamba

ITERATOR

1 Collection icindeki elementlere mueyyen 1 sirayla access etmek ucun iterator-lar istifade olunur.Elbetde collection-larin icindeki elementlere index veya key ile access etmek mumkundur.Ancaq bu hamisinin index-nin ve key-nin bilinmesi vacib sayar.List tipli Collection-lara sirayla access etmek ucun massiv-lerdeki kimi 1 dongu qurulabiler:


 for(int i=0;i<list.size();i++){
String element=(String)list.get(i);
System.out.println(element);

Ancaq iterator-da istifade oluna biler.Iterator icerisinde element qaldigi muddetce 1 sonrakini "ver" deye isleyir.


 Iterator iter=list.iterator();
while(iter.hasNext()){
String element=(String)iter.next();
System.out.println(element);
}
Elementler iter.next() metodu ile irelileyir.Son element geldiyinde ise hasNext() metodu False donderir ve dongu bitir.

2 Nisan 2012 Pazartesi

JAVADA COLLATOR SINIFI

Java-nin Collections sinifinin faydali 1 metodlarindan biride sort () metodudur.Bu metod verilen listeleri istediyimiz kimi  siralamaga imkan verir.Ancaq bu kimi islerde bezen karakter meselesi ortaya cixir.Yeni,Şırnak,Çanakkale,Ordu kimi Stringleri siraladiqda canakkale,Ordu Sirnak sirasini gozleyerken Ordu,canakkale,Sirnak seklinde 1 siralama ortaya cixir.Bu kimi veziyyetlerde bize komek edecek siniflerden biri Locale alabilen COLLATOR sinifidir.Dediyimiz bu sort() metodunun 2 versiyasi vardir:

  • Collections.sort(List<T>list);
  • ArrayList,LinkedList,Vector kimi List interface-ni implement eden 1 sinifi parametre olaraq alir.Metodu bu sekilde istifade etmek ucun listenin saxlandigi elementlerin tipi olan sinif Comparable sinifini implement etmek zorundadir.meselen:
sadece kitab adini tutan ,Kitab adinda sade 1 class-miz oldugunu dusunek.Bu sinif implement etdiyi Comparable interface-nin compareTo(); metodunu implement etmek mecburiyyetinde.

public class Kitab implements Comparable{
private String ad;
public String getAd(){
return ad;
}
public void setAd(String ad){
this.ad=ad;
}

@ Override
public int  compareTo() (Kitab kitab){
Collator c=Collator.getInstance(Locale.getDefault());     // veya new Locale("tr","TR");
return c.compare(this.getAd(),o.getAd());
}
}

Indi ise kitablarimizi listeleyek:

List<Kitab> kitabsiyahisi=getKitablar();
Collections.sort(kitabsiyahisi);




  • Collections.sort(List<T>list,Comparator<T>comparator);
Bu metod objeleri muqayise edir.Eger muqayise dogru olarsa  ,Collections.sort(Koleksiyon,siralama) metodu ile siralama aparilir.bu metod ise 1i List digeride Comparator interface-ni implement eden sinifi parametre olaraq alir.Kitablarimizi siralamaq ucun bu defe Comparator interface-ni implement eden Comparator 1 sinif tanimlayiriq:

class KitabComparator implements Comparator<Kitab>{

@ Override
 public int compare(Kitab k1,Kitab k2){
Collator c=Collator.getInstance(new Locale("tr","TR"));
return c.compare(k1.getAd(),k2.getAd()));
}
}

List <Kitab> kitabsiyahisi=getKitablar();
Collections.sort(kitabsiyahisi,new KitabComparator());

kimi 1 ifade ilede kitabsiyahisi siralanmis 1 sekilde olur.

SORTING COLLECTIONS

ArrayList bize terkibinde olan deyerleri sort etmeye imkan vermir.ancaq java.util.Collections class-i bunu ede bilir.meselen:
import java.util.*;
class TestSort1 {
public static void main(String[] args) {
ArrayList<String> stuff = new ArrayList<String>(); // #1
stuff.add("Denver");
stuff.add("Boulder");
stuff.add("Vail");
stuff.add("Aspen");
stuff.add("Telluride");
System.out.println("unsorted " + stuff);
Collections.sort(stuff); // #2
System.out.println("sorted " + stuff);
}
}
CONSOLE:
#1 unsorted [Denver, Boulder, Vail, Aspen, Telluride]
#2 sorted [Aspen, Boulder, Denver, Telluride, Vail]



ARRAYLIST BASICS

java.util.ArrayList Collection Framework-de en cox istifade olunan class-lardan biridir.Bunlar arraylere oxsayir ancaq Arraylerden ferqli olaarq bezi ustunluklere sahibdirler.Bu class-dan istifade ederek massive istediyimiz qeder deyer daxil ede bilerik.Eger ArrayList() bele olarsa,yeni icinde hec1 deyer yazmazsaq bu o demek olarki 10 elementli 1 ArrayList emele gelir ve istediyimiz qeder element daxil ede bilerik.eger ArrayList (100) yazsaq ,onda 100 elementli 1 ArrayList yaratmis olariq.Bezi metodlari var:

  • add();
Bu massive hen hansi 1 deyeri elave edir.meselen:
ArrayList adlar=new ArrayList();
adlar.add("hale");
index nomresine gorede massive deyer elave ede bilerik.meselen:
adlar.add(1,"hale");

  • addAll();
Bu metod collection ile mueyyen olunmus 1 massivi diger massive elave edir.meselen:
adlar.addAll ( 2ci yaratdigimiz massiv);

  • clear();
Bu metod massiv listinin butun deyerlerini silir.meselen:
adlar.clear();     // adlar massivinin ici silindi.


  • contains();
deyer ile verdiyimiz melumati massivde axtarir.Eger taparsa true, eks teqdirde ise false dondurur.meselen:
if(adlar.contains("hale")==true){}

  • containsAll();
collectiondaki massivi diger massivin icinde axtarir.taparsa true,olmasa false dondurur.meselen:
if(adlar.containsAll( 2ci massivimizin adi)==true){}

  • ensurecapasity();
verilen deyer ile massivin tutumunu artirir.meselen:
adlar.ensureCapasity(100);    //     adlar massivinin tutumu 100-e qeder artirildi.

  • Get();
Bu metod index nomresi ile verilen deyere uygun geleni dondurur.meselen:
adlar.get(1);    // hale-ni dondurur.

  • indexOf();
deyerin index nomresini dondurur.eger -1 gelerse demeli hemin deyer massivde yoxdur.meselen:
adlar.indefOf("hale");           // 1-i dondurur.

  • IsEmpty();
bu massivin icinin bos olub olmadigini yoxlayi.eger true dondererse ,onda massivin ici bos olar.meselen:
if(adlar.IsEmpty()==true){}  

  • remove();
index nomresi ile verilen deyeri massivden goturur.meselen:
adlar.remove(1);   //     hale adlar-dan cixarildi.
idnex nomresi yerine deyerde vere bilerik.meselen:
adlar.remove("hale");

  • RetainAll();
verilen massivin xaricindeki butun deyerleri massivden silir.meselen:
adlar.RetainAll(2ci massivin adi);
Yeni , adlarda olub 2ci massivde olmayan deyerler adlardan silinsin.

  • Set();
Massivin her hansi yerindeki 1 elementi deyismek ucun istifade edilir.meselen:
adlar.set(0,"hale");

Eger List myList=new ArrayList() ; yazsam ve burada hec 1 tip mueyyen etmesem o zaman bu hem String hemde integer ve s.deyerler ala biler.
Yox eger List <String> myList=new ArrayList<String>(); yazsam bura ancaq String tipinden olan deyisenleri elave ede bilerem.
ArrayList<String>() String [] -na oxsardir.Yeni her ikisi String tipinde olan deyisenleri tuturlar.Ancaq ArrayList<String>()  String []-dan cox gucludur.


Umumilikde, collection-lar Object-ler tuturlar primitive tipleri tutmurlar.Java 5-e qeder ArrayList-ler asagidaki kimi deklare olunurdu:
List myInts=new ArrayList();
myInts.add(new Integer(42));        //   42 wrap olunurdu.

Java 5-de ise artiq integer tipinde olan deyisenler warp olunmus formada gelmeye basladilar.
myInts.add(42);             //   autboxing handles it.

MAP INTERFACE

MAP interface-key (acar) ve value(deyer)  cutluyunu 1 arada tutmaq ucun istifade edilir.Map interface herhansi 1 siralama mehdudiyyeti qoymur.Yeni Map-e elave olunan key ve value cutluklerinin daxil edildiyi sirada qalacagi qaranti deyildir.Map interface-ni implement eden sinifler icerisinde en cox istifade olunani HashMap sinifidir.HashMap verilen key-den hash funksiyasinin komeyi ile 1 array indexi yaradir.Verilen deyerde bu array index-deki yaddasda yerlesdirilir.HashMap-de unsorted ,unordered -dir.HashMap-de elementler nece geldi siralanir.HashMap collection-da 1 null key ve coxlu nul deyerlere icaze verir.

  • Hashtable
Hashtable-da synchronized-dir.yeni class-in key  metodlari synchronized-dir.class deyil.Hashtable-in HashMap-den ferqi budurki null key ve value-lara icaze vermir.

  • LinkedHashMap
LinkedHashMap class-i insertion order-i saxlayir.baxmayaraqki,HashMap -den yavasdir adding ve elementlerin remorving-de.

  • TreeMap
TreeMap TreeSet kimi sorted-dir.Yeni default olaraq menasi "sorted elementlerin natural sirasi terefinden olur" demekdir.TreeMap NavigableMap-i implement edir.

Map tipli collectionlar ucun access for dongusu ile mumkun deyildir.List-de 0-dan baslayaraq element sayina catana qeder sirayla almaq mumkun olabiler.Ancaq Map-de her hansi 1 index-deki (meselen 3-cu) elementin ne oldugu bilinmez.Map 1 elementini vermek ucun 1 key ister.Ancaq Map-in icindeki butun keyleri bilmek her zaman mumkun deyildir.Cunku Map-i yaradan kodla Map-in icindekileri istifade eden kod ferqli ola biler.Iterator burada tek caredir.

SET INTERFACE

SET interface-sirasi olmayan (unordered) ve dublikasyon olmayan 1 interface-dir.yeni burda eyni adli 1 nece element ola bilmez.

  • HashSet
HashSet class-i unsorted,unordered-dir.Bu daxil edilen objenin hashcode()-nu istifade edir.

  • LinkedHashSet
HashSet-in ordered olunmus versiyasidir.Bu class iteration order ehtiyac duyulanda HashSet evezine istifade olunur.

  • TreeSet
TreeSet 2 sorted collection -dan 1-idir(digeri TreeMap-dir).O Red-Black tree strukturunu istifade edir ve qaranti verir ki ,elementler artan sirada olacaqlar(asceding) natural ordere-e muvafiq olaraq.Esassiz olaraq,TreeSet constructor ile qurula biler ki,buda bize Comparable ve ya Comparator interface-lerini istifade etmekle hansi siralamanin ola bileceyini verir.Java 6-da TreeSet NavigableSet-i implement edir.

LIST INTERFACE

List objelerden ibaret 1 topluluqdur.Topluluq icinde dublikasyon ola biler.yeni eyni 1 elementden 1 nece sayda ola biler.Link elementleri ordered(sirali) 1 sekilde tutmaq ucun hazirlanmis 1 interface-dir.List interface-nin implement etdiyi class-larda index veziyyetlerine gore ordered(sirali) olurlar.

  • ArrayList
ArrayList class-i fast iteration ve fast random access etmeye imkan verir.Buda ordered-dir ,ancaq sorted deyildir.ArrayList new RandomAccess interface-i implement edir-hansiki RandomAccess interface marker interface-dir(yeni menasi metodlari yoxdur).
  • Vector
Vector class-i esasen ArrayList kimi eynidir.,amma Vector-un metodlari synchronized-dir.Vector ArrayListden sonra yegane class-dir ki ,RandomAccess interface-ni implement ede bilir.
  • LinkedList
LinkedList class-i index siralamasina gore ordered-dir.ancaq bunun elementleri doubly-linked -dirler,Yadda saxlamaq lazimdir ki , LinkedList ArrayList-den cox yavas iterate ede bilir,amma fast insertion ve deletion -a ehtiyac duyuldugunda yaxsi secimdir bunu istifade etmek.Java 5-de LinkedList class-i java.util.Queue interface-ne implement edilib.Ve buna gorede Queue interface-nin umumi metodlarini destekleyir:
  • peek();
  • poll();
  • offer();

COLLECTIONLAR

Collection--icerisinde 1-den cox obje saxlayan,lazim geldikde yeni obje daxil etme ve silme islerine icaze veren siniflerdir.Collection-larda bunun xaricinde siralama(sorting) ve collection-in icinde her hansi 1 objeyi searching etmeyede imkan verirler.Collection-lar ucun Collections class-i,massivler ucun ise Array class-i cox faydali metodlar saxlayir.Collection-larin array-lerden ferqi odurki,Array-lerde element sayi sabitdir.eger

String[] names=new String[10];

yazsaq ,bu o demekdirki bu massiv ancaq 10 eded String saxlaya biler icinde.10 elementi olan 1 massive 11-ci elementi daxil etmek olmaz.1-ci elementle 6-ci element arasina her hansi 1 element daxil etmek olmaz.Basqa sozle Array-ler static-dir dynamic deyildir.Ancaq collectionlar dynamic-dirler, Istediyimiz qeder element daxil edib cixarda bilerik,ustelik elementlerin arasina her hansi 1 element daxil edilerse ondan sonrakilar avtomatik olaraq surusdurulur.Massivler yerine istifade oluna bilecek Collection-lar  List-lerdir.Daha dogrusu List interface-ni implement etmis ArrayList kimi class-lardir.


  ArrayList list=new ArrayList(); // Baştan element sayısını bilmemiz lazim deyil.
list.add("1");
list.add("2");
list.add("3");
list.add(1,"1.5");      // araya daxil etdik.(1 ve 2-nin arasina)
        for (Object o  : list) {
            System.out.println(o);
        }

String element=(String) list.get(1);
System.out.println("element"+" "+element);


CONSOLE:

1
1.5
2
3


element  1.5 olacaq.



Collectionlar java-ya daxil olmadan once ArrayList-e oxsar olan Vector adinda 1 class vardi.Collection-lar java-nin standart library-ne daxil edilenden sonra,Vector sinifinde  List interface-ni implement edecek sekilde bezi deyisiklikler edildi.Vector-da ondan sonra 1 Collection olmaga basladi.
Collection-lar icerisinde olan Map interface-i acar(key) ile access-e icaze verir.Meselen:


HashMap map=new HashMap();
map.put("user1","paswword1");
map.put("user2","password2");
String pw2=(String) map.get("user1");

CONSOLE:
paswword1 olacaq.



COLLECTION FRAMEWORKS ise interface-ler ve onlarin implement etdiyi classlardan ibaret olur ve collection uzerinde mueyyen isler gormek ucun inkisaf etdirilmis 1 java librarydir.
Collection icinde 1 cox elementi saxlayan 1 qurulusdur.Elementler sirali( ordered) ve ya sirasiz (unordered) ola bilirler.
Bunlari istifade etmekdeki meqsed:

  • collectiona objeler elave etmek veya silmek
  • melumatlari siralamaq
  • 1 melumatin collectionda olub olmadigini yoxlamaq ve s.
Collection Frameworkun ozunu yaradan "COLLECTION" adlanan interface-dir.Bu interface frameworkun esasi olan metodlari tanimlayir.List ve Set interface-leri Collection interface-inde olmayan metodlari tanimlayaraq frameworkun uygulama alanini genislendirir.

CORE INTERFACE_ler asagidakilardir:
  • Collection
  • List
  • Set
  • Map
  • Queue
  • SortedMap
  • SortedSet
  • NavigableSet
  • NavigableMap
Bu interface-leri implement eden class-lar asagidakilardir:
  • MAP---HashMap , Hashtable , TreeMap , LinkedHashMap .
  • SETS--HashSet , LinkedHashSet , TreeSet .
  • LISTS--ArrayList , Vector , LinkedList .
  • QUEUES--PriorityQueue .
  • UTILITIES--Collections , Arrays .
Diger 1 vacib interface-de Map-dir.Ancaq Map interface-i Collection interface-nin 1 genislenmesi deyildir.Yeni , Collection hiyerarsisine daxil deyildir.Amma Collection Frameworkun 1 parcasidir.
ORDERED NEDIR?
Ordered collection o demekdirki, collection-daki elementlerin mueyyen 1 sirasi var.Sira deyerlerin musteqilliyidir.Buna misal olaraq List-leri misal gostere bilerik.List ordered Collection-dir.List-de olan her1 elementin  1 index-i var.hansiki elementlerin sirasini formalasdirir.Ancaq oz elementlerinin deyerleri ile adeten elaqeli olmurlar.
SORTED NEDIR?
Sorted collection o demekdirki,collection-da olan sira bezi qayda veya qaydalara muvafiq olaraq mueyyen olunur.Bu sort order kimi taninir.Sorting ozunun objelerinin deyerlerine esaslandirilaraq edilir.yeni collection-a objeler qoyursan ve collection ozu mueyyenlesdirir hansi qaydada qoymagi..buda  sort order-e esaslanir.Sort order natural order -de adlandirilir bezen.Meselen String-ler ucun A B-den evvel ,F G-den evvel gelir ve s.Integer-ler ucun 1 2-den evvel gelir ve s.Sort order (natural order) siralama ile eyni deyildir(index ve s.).


collection interface concrete implementation classes