Posts

Featured post

Method overloading 1.0

Method signature.
Method signature-yə metodun adı və sırası ilə method tipləri daxildir.
Bir sinif daxilində eyni adda bir neçə metod declare edə bilərik.
Bu zaman metodumuzun parameter tipi və ya sayı və ya hər ikisi fərqli olmalıdır.
Overload bir sinif daxilində, yuxarıda qeyd etdiyimiz şərtlər daxilində birdən çox eyni adlı metodların declare edilməsidir.

Parametersiz və int tipində parametri olan eyni adlı metodlar overload metodlardır.
publicvoidmethod1(){}publicvoidmethod1(int a){}
Parameter tiplərinin yerini dəyişsək metodlarimiz yenə də overload olacaq.
publicvoidmethod1(String a,int b){}publicvoidmethod1(int b,String a){}
Aşağadakı metodlar overload metodlardır.
Bu metodlara müraciət etdikdə xəta alacağıq.
Java compiler hansı metodun çağırıldığını anlaya bilməyəcək.
Çünki biz burada hər iki argument üçün int literal valuesi keçiririk(pass).
Aşağadakı xətanı alırıq.
reference to method1 is ambiguous both method method1(double,int) in OverloadMethodExample and method method1(int,…

Method Overloading 1.1

Javada eyni adda birden cox metod yaza bilirik.
Burda esas fikir vermeliyikki metodun parametrinin tipi ve ya sayi və ya hər ikisi fərqli olsun.

Aşağadakı nümunədə calculate metodunun overload olduğunu görürük.
Birinci metodumuz int tipində 1 parameter,ikinci metodda long tipində 1 parameter ,
üçüncü metodda isə String tipində 1 parameter alır.
Çalışdırdıqda int tipində parameteri olan metodumuzun çalışdığını görəcik.

package com.mehman; /** * * @author bashirovm */publicclassMain { publicvoidcalculate(int a){ System.out.println("int: "+a); } publicvoidcalculate(long a){ System.out.println("long: "+a); } publicvoidcalculate(String a){ System.out.println("String: "+a); } publicstaticvoidmain(String[] args) { Main m = new Main(); int a = 1; m.calculate(a); } }
Metodlarımızda dəyişiklik edək,int tipində parameter alan metodumuzu silək.
package com.mehman; /** * * @author bashi…

Immutable və mutable siniflər.

İmmutable classlar dəyişməyən classlardır.
Numune olaraq String,İnteger,Double və s göstərmək olar.
Mutable classlar immutabledən fərqli olaraq dəyişə bilirər.
StringBuilder,StringBuffer,Date classlarını nümunə göstərmək olar.

Bu yazıda string classından yazacam.
String qeyd etdiyimiz kimi immutable classdir.
String final classdır.
Yəni biz String objecti üzərində dəyişiklik etdikdə o dəyişikliklər mövcud objectə yansımır.
Məsələn:

package com.mehman;/** * * @author bashirovm */publicclassStringObject{publicstaticvoidmain(String[] args){ String name1 ="Java";//name1 adında string objecti yaradılır string poola əlavə edilir. String name2 = name1.concat(" and Oracle");//String immutable class olduğu üçün name1 dəyişəninə concat etdikdə yeni bir //string objecti yaradılmış olur və heapdə string poola əlavə edilir. //name1 objectimiz dəyişilmir. String name3 = name2.substring(9);//Eynilə burdada yeni bir string objecti yaradılacaq. …

Non Access Modifier

Bu gün non access modifierlərdən final-a baxacağıq.
Siniflər,metodlar,dəyişənlər final elan edilə bilərlər.

Final siniflər.Final elan edilən siniflərdən alt siniflər yarada bilmərik.
Cəhd etdikdə aşağadakı xətanı alacağıq.
cannot inherit from final A.
package com.mehman.nonaccessmodifier;/** * * @author bashirovm */publicfinalclassA{}
package com.mehman.nonaccessmodifier;/** * * @author bashirovm */publicclassBextends A{}
Final metodlar.Final elan edilən metodları alt siniflərdə override(əzmək) edə bilmirik.
Xəta alırıq.
method() in B cannot override method() in A  overridden method is final
package com.mehman.nonaccessmodifier;/** * * @author bashirovm */publicclassA{publicfinalvoidmethod(){}}
package com.mehman.nonaccessmodifier;/**** @author bashirovm*/publicclassBextends A{@Overridepublicvoidmethod(){}}

Final dəyişənlər.Final elan edilən dəyişənlərin dəyərini ya elan edilən zaman yada constructorda vermək məcburiyyətindəyik.
Final dəyişənlərə bir dəfə dəyər mənimsətdiksə tutduğları dəyərləri …

Non Access Modifiers - Static.

Nested(daxili) siniflər,metodlar,dəyişənlər,Initialization bloklar static elan edilə bilirlər.
Static dəyişənlər(variables)
Dəyişənləri iki yerə bölə bilərik.
İnstance dəyişənləri.Sinif dəyişənləri.İnstancedəyişənləri sinfdən hər yeni instance yaratdıqda yaddaşda fərqli valuelər ala bilirlər.
Tutaqki Car adında sinfimiz və name adında instance dəyişənimiz var.
Bu sinifdən istifadə edib istənilən qədər instance yarada bilərik.
Mercedes,Honda,Nissan,BMW və s avtomobillərini yarada bilirik.
Burada name instance dəyişəni instanceyə bağlı olaraq fərqli dəyərlər almış olur.
İnstanceyə bağlı dəyişən olduğu üçün instance dəyişəni adlanır.

Sinif dəyişənləri.
Javada instanceyə bağlı deyil də birbaşa sinfə bağlı dəyişənlər elan edə bilirik.
Bu dəyişənlər sinif dəyişənləri adlanırlar.Bir dəfə elan edildikləri zaman yaradılırlar.
Sinif dəyişənləri static keywordü ilə elan edilir.
Static dəyişənlər instance dəyişənlər kimi instance yaradılanda deyil ,elan edilən andan etibarən yaddaşda saxlanılırlar.
Local dəyiş…

Access modifiers

Public access modifier.
Siniflər,sinflərin memberləri(methods,fields),interfacelər public access modifier ola bilirlər.
Local dəyişənlər public,protected və private access modifier-ə sahib ola bilməzlər.
Public elan edilən sinif memberləri mövcud olduqları paketdəki siniflərə və digər paketlərdəki siniflərə açıqdırlar.
package1 paketində public A sinifi elan edirik.Bu sinfimizin public fieldi(name) və metodu(getName) var.
A sinfinin memberlərinə eyni paket daxilində(B sinfində) müraciət edə bilirik.
Nümunə üzərində baxaq.

A.java
package package1;/** * * @author Mehman */publicclassA{public String name;publicvoidgetName(){}}
B.java
package package1;/** * * @author Mehman */publicclassB{publicB(){ A a =new A(); a.name=""; a.getName();}}
Eyni zamanda package2 sinfində olan C ve D sinfilərindən A sinfinin memberlinə müraciət edə bilirik.
C.java
package package2;importpackage1.A;/** * * @author Mehman */publicclassC{publicC(){ A a =new A(); a.nam…

Javada java.time paketinin sinifləri.

java.time paketində olan siniflər immutable siniflərdir.Constructorlari private-dır.
Buna görə də bu paketin siniflərinin objectini yarada bilmirik.
now,of,from,parse metodlari vasitəsilə bu siniflərə müraciət edirik.

package com.mehman;importjava.time.LocalDate;importjava.time.Period;importjava.time.format.DateTimeFormatter;importstatic java.time.temporal.ChronoUnit.DAYS;/** * * @author bashirovm */publicclassExample{publicstaticvoidmain(String[] args){//LocalDate sinfimizden hazirki tarixi now() metodu ile aliriq.//LocalDate sinfimizden of metodu ile tarix genereasiya ede bilrik. LocalDate today = LocalDate.now(); LocalDate birthday = LocalDate.of(1992,12,29); System.out.println("today=>"+ today); System.out.println("birthday=>"+ birthday);//Tariximizin il,ay,gun bilgilerini alaq. System.out.println("Year=>"+ today.getYear()+";Month=>"+ today.getMonthValue()+";Day=>"+ tod…

Immutable siniflər

Javada wraper siniflərın hamısı immutable siniflərdir.
İmmutable siniflər dəyişilə bilməyən siniflərdir.
Javada sinfi immutable elan etmək üçün aşağadakı qaydalar lazımdır.

Sinfi final elan etmək lazımdır.Belə olduğu halda heç bir sinif bu sinfden toreyə bilməyəcək,inheritance olmadığına görə metodlarınıda override edə bilməyəcək.Bütün variableləri private və final elan etmək lazımdır.İnstance variablelər üçün set metodu yazılmamalıdır.Bütün instance variableləri constructorda initialize etmək lazımdır.
Nümunə kimi wraper siniflərin kodlarına baxa bilərik və ya öz sinfimizi yaza bilərik.

package com.mehman;/** * * @author bashirovm */publicfinalclassImmutableExample{privatefinal String name;publicImmutableExample(String name){this.name= name;}public String getName(){return name;}publicstaticvoidmain(String[] args){ ImmutableExample ie =new ImmutableExample("Java"); System.out.println(ie.getName());}}

Constructorlar

Javada hər sinfin ən azı bir constructoru vardır.
Constructorların adı class adı ilə eyni olur.
Biz elan etməsək susmaya görə default constructor vardır.
Biz constructor elan etdikdə isə default constructor artıq olmur.
Classın instancesini yaratdıqda ilk işləyən metod constructordur.
Bir constructor başka bir constructoru cağıra bilər.
Constructorlar overload edilə bilirlər.

Javada constructor əsasən iki məqsəd üçün istifadə edilir.
Global dəyişənlərə ilkin dəyərlərin verilməsi üçün.Instance yaratmaq üçün. Global dəyişənlərə ilk dəyərlərin verilməsinə baxaq.
Təcrübəsi 3-ilə qədər olan programçılara junior ,3-ildən çox olan programçılara isə senior dəyəcəyik.
package com.mehman.contructor; /** * * @author bashirovm */publicclassExample { privateint experience; private String level = "Junior"; publicExample(int experience) { if (experience > 3) this.level = "Senior"; } publicstaticvoidmain(String[] args) { Example e = new Exa…