1. Açar söz new
Java-da istənilən sinifin obyektini yaratmaq üçün new açar sözündən istifadə olunur. Bu “sehrli” söz JVM-ə belə müraciət edir: yeni obyekt üçün yaddaş ayır və onun üçün konstruktoru çağır.
Analoqiya:
Əgər sinif — bu, avtomobilin layihəsidirsə, new — həmin layihə əsasında real maşını yığan zavoddur.
Nümunə
Person vasya = new Person();
Burada nə baş verir:
- new Person() — Person tipində yeni obyekt yaradılır (konstruktor çağırılır).
- vasya — yaradılmış obyektə istinadı saxlayan dəyişəndir.
Yaddaşda bu necə görünür
Person vasya = new Person(); yazdıqda, yaddaşda obyektin sahələri (məsələn, ad və yaş) üçün yer ayrılır, və vasya dəyişəni həmin sahənin ünvanını — istinadı saxlayır.
Diqqət:
Əgər new yazmağı unutsanız, dəyişən heç nəyə işarə etməyən sadəcə istinad olacaq (null). Belə “boş” obyektin sahələrinə və ya metodlarına müraciət etməyə cəhd NullPointerException-a səbəb olacaq.
2. Konstruktora çağırış: bu necə işləyir?
Konstruktor — obyekt yaradılarkən çağırılan və onun sahələrini ilkinləşdirən, nümunəni işləməyə hazırlayan xüsusi metoddur.
Sintaksis
ImyaKlassa imyaPeremennoy = new ImyaKlassa(argumenty);
- Sinifin parametrləri olan konstruktoru varsa, bu parametrlər mütləq ötürülməlidir.
- Konstruktor parametrlərsizdirsə (və ya defolt olaraq), mötərizələr boş qalır.
Nümunə: parametrləri olan konstruktor
public class Person {
String name;
int age;
// Parametrləri olan konstruktor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Obyekt yaradırıq:
Person petya = new Person("Petya", 25);
"Petya" və 25 dəyərləri yeni obyektin name və age sahələrinə düşəcək.
Parametrlərsiz konstruktor
public Person() {
this.name = "Adsız";
this.age = 0;
}
İndi belə yaza bilərsiniz:
Person mysteryMan = new Person(); // name="Adsız", age=0
3. Obyektlə işləmə: sahələr və metodlar
Obyekt yaradıldıqdan sonra, onun sahə və metodlarına nöqtə operatoru (.) vasitəsilə müraciət edə bilərsiniz:
petya.name = "Pyotr";
System.out.println(petya.name); // Pyotr
petya.sayHello();
Əgər sinifdə belə bir metod varsa:
public void sayHello() {
System.out.println("Salam, mənim adım " + name + "!");
}
O zaman petya.sayHello(); çağırışı belə çıxış verəcək: Salam, mənim adım Pyotr!
Nümunə: tam sinif
public class Person {
String name;
int age;
public Person(String name, int age) { // konstruktor
this.name = name;
this.age = age;
}
public void sayHello() { // metod
System.out.println("Salam, mənim adım " + name + "!");
}
}
İstifadə:
Person vasya = new Person("Vasya", 30);
vasya.sayHello(); // Salam, mənim adım Vasya!
4. İstinad tipli dəyişənlər: bu nədir?
Java-da sinif tipli dəyişən — yaddaşdakı obyektə istinaddır, obyektin özü deyil.
Demonstrasiya
Person vasya = new Person("Vasya", 30);
Person anotherVasya = vasya;
İndi həm vasya, həm də anotherVasya yaddaşda eyni obyektə işarə edir. Sahəni bir dəyişənlə dəyişsəniz — o biri üçün də dəyişəcək:
anotherVasya.age = 31;
System.out.println(vasya.age); // 31
Vacib məqam:
Əgər iki fərqli obyekt yaratsanız, onlar müstəqildir:
Person petya = new Person("Petya", 25);
Person masha = new Person("Masha", 22);
petya.age = 99;
System.out.println(masha.age); // 22 (dəyişməyib!)
5. Nümunə: bir neçə obyektin yaradılması və istifadəsi
Tətbiqə bir neçə obyekt əlavə edək. Gəlin Person sinfimiz olsun, və main-də bir neçə insan yaradaq, onların salamlarını çıxışa verək.
Person sinfi
public class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Salam, mənim adım " + name + ", " + age + " yaşım var!");
}
}
main-də istifadə
public class Main {
public static void main(String[] args) {
Person vasya = new Person("Vasya", 25);
Person petya = new Person("Petya", 27);
vasya.sayHello(); // Salam, mənim adım Vasya, 25 yaşım var!
petya.sayHello(); // Salam, mənim adım Petya, 27 yaşım var!
// Obyektlərin müstəqilliyinin demonstrasiyası:
vasya.age = 100;
vasya.sayHello(); // Salam, mənim adım Vasya, 100 yaşım var!
petya.sayHello(); // Salam, mənim adım Petya, 27 yaşım var!
}
}
Proqramın çıxışı:
Salam, mənim adım Vasya, 25 yaşım var!
Salam, mənim adım Petya, 27 yaşım var!
Salam, mənim adım Vasya, 100 yaşım var!
Salam, mənim adım Petya, 27 yaşım var!
6. Obyekt yaradarkən tipik səhvlər
Səhv №1: new yazmağı unutmusunuz
Person vasya;
vasya.name = "Vasya"; // NullPointerException!
vasya dəyişəni heç bir obyektə istinad etmir (null). Mütləq new ilə obyekt yaratmaq lazımdır.
Səhv №2: Konstruktora parametrlər ötürülməyib
Person petya = new Person(); // Əgər parametrlərsiz konstruktor yoxdursa, kompilyasiya xətası
Əgər sinifdə yalnız parametrləri olan konstruktor varsa, obyekt yaradarkən bu parametrləri mütləq göstərmək lazımdır.
Səhv №3: Dəyişənin obyektin özünü saxladığını düşünmək
Person a = new Person("Anya", 20);
Person b = a;
b.age = 99;
System.out.println(a.age); // 99, çünki a və b — eyni obyektə istinaddır!
Java-da sinif tipli dəyişən — həmişə istinaddır, obyektin özü deyil.
Səhv №4: Bir obyektin sahələrini dəyişirsiniz, digərinin dəyişməyəcəyini gözləyirsiniz
Person x = new Person("X", 1);
Person y = x;
x.age = 42;
System.out.println(y.age); // 42
İki müstəqil obyekt lazımdırsa — onları ayrıca yaradın!
GO TO FULL VERSION