Java-da obyekt yaratmağın müxtəlif yolları
Mənbə:
Orta Bu dərslikdə biz Java-da obyekt yaratmağın müxtəlif yollarını öyrənəcəyik. Java obyekti Java sinifinin bir nümunəsidir. Hər bir obyektin vəziyyəti, davranışı və identifikatoru var. Sahələr (dəyişənlər) obyektin vəziyyətini saxlayır, metodlar (funksiyalar) isə obyektin hərəkətini göstərir. Siniflər icra zamanı obyekt nümunələrinin yaradıldığı “planlar” kimi xidmət edir.
Java-da obyektin yaradılması
Obyektin yaradılması sinif sahələrində (həmçinin dəyişənlər də adlanır) məlumatların saxlanması üçün yaddaşın ayrılması prosesidir. Bu proses tez-tez sinif nümunəsinin yaradılması adlanır. Java-da obyektlər yaratmağın dörd müxtəlif yolu var:
- yeni açar sözündən istifadə etməklə
- metod newInstance()
- clone() metodu
- obyektin seriyadan çıxarılması
İndi qeyd olunan üsulların hər birinə ətraflı nəzər salaq.
Açar söz yeni
Bu Java-da obyekt yaratmağın ən geniş yayılmış yoludur.
Yeni açar sözü qeyd olunan tipin yeni nümunəsi üçün yaddaş ayırmaqla sinif nümunəsini yaradır. Yenidən sonra konstruktor gəlir - obyekt yaratmaq və yaradılmış obyektin sahələrini işə salmaq üçün cavabdeh olan xüsusi bir üsul.
Obyekt yeni operatorla yaradılır və konstruktorla işə salınır.
Yeni operatorla Java obyektinin yaradılması nümunəsi :
Date today = new Date();
Bu ifadə yeni
Tarix obyekti yaradır (
Tarix java.util paketinin daxilindəki sinifdir ). Koddakı bu tək bənd üç əməliyyatı yerinə yetirir: bəyannamə, instantiasiya və inisializasiya.
Date today - bu günün Date tipli obyektə istinad edəcəyi barədə tərtibçiyə məlumat verən dəyişən bəyannamədir . Yeni operator
Date sinfini yaradır ( yaddaşda yeni
Date obyekti yaradır) və Date() obyekti inisiallaşdırır. Aşağıdakı nümunəni nəzərdən keçirin:
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Michael Cole";
this.uid = 101;
}
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person("John Bodgan", 102);
System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
}
}
Bu koddan biz
new açar sözündən istifadə edərək
Person obyekti yaradırıq :
- p1 obyekti dəyişən adı dəyəri “Michael Cole” və UID-i 101-ə təyin edilmiş parametrləşdirilməmiş konstruktoru çağırır.
- p2 obyekti parametrləşdirilmiş konstruktoru çağırır, burada “John Bodgan” və 102 dəyərini konstruktora ötürür.Sonra bu dəyərlərə dəyişən adı və UID təyin olunur.
newInstance() metodundan istifadə etməklə
Java-da newInstance() metodu müəyyən bir sinif obyektinin nümunəsini dinamik şəkildə yaratmaq üçün istifadə olunur.
newInstance() metodunun iki standart istifadəsi var :
- java.lang.Class API -dən newInstance() metodu
- java.lang.reflect.Constructor API -dən newInstance() metodu
Class API-dən newInstance() istifadə edərək
İş vaxtında bir sinfin obyektini yaratmaq üçün biz həmin sinfin obyektini qaytaran Class API-dən
newInstance() metodunu çağırmalıyıq .
java.lang.Class sinfinin
newInstance() metodu heç bir parametr və ya arqument qəbul etmir və həmin sinif üçün arqumentsiz konstruktor adlandırıla bilər.
Gəlin java.lang.Class sinfinin
newInstance() metodundan istifadə edərək
Person sinfinin obyektini yaratmaq üçün bəzi koda nümunələrə baxaq :
public class Person {
private String name;
private int uid;
public Person() {
this.name = "Carl Max";
this.uid = 101;
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class c = Class.forName("com.medium.option2.Person");
@SuppressWarnings("deprecation")
Person p = (Person) c.newInstance();
System.out.println("Name: " + p.getName());
System.out.println("UID: " + p.getUid());
}
}
Class.forName (sinfin tam uyğun adı)
Person adlı sinfi yükləyir , sonra
newInstance() Person tipli yeni obyekt yaradır və ona istinad qaytarır. İndi
p -ə
Person istinadından istifadə edərək müəyyən hərəkətləri yerinə yetirmək üçün onun
getters() və
setter() funksiyalarını çağıra bilərik . Xahiş edirəm qeyd edin:
- Həm Class.forName() , həm də newIstance() istisnaları ya cəhd və tutma blokları, ya da throws açar sözü ilə idarə etmək lazımdır .
- Class API-dən newInstance() metodu Java 9-dan bəri köhnəlmişdir.
Konstruktor API-dən newInstance() istifadə edərək
Konstruktor sinifinin
newInstance() metodu (
java.lang.reflect.Constructor ) Class sinfinin
newInstance() metoduna bənzəyir , yalnız parametrli konstruktorlar üçün parametrləri qəbul edir.
Gəlin java.lang.reflect.Constructor sinfinin
newInstance() metodundan istifadə edərək
Person sinfinin obyektini yaradaraq bu yanaşmanı nümayiş etdirək :
public class PersonTwo {
private String name;
private int uid;
public PersonTwo() {
this.name = "Maya Kumari";
this.uid = 101;
}
public PersonTwo(String name) {
this.name = name;
this.uid = 102;
}
public PersonTwo(String name, Integer uid) {
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
try {
Class.forName("com.medium.option2.PersonTwo");
Constructor c1 = PersonTwo.class.getConstructor();
PersonTwo p1 = (PersonTwo) c1.newInstance();
System.out.println("Name: " + p1.getName());
System.out.println("UID: " + p1.getUid());
Constructor c2 = PersonTwo.class.getConstructor(String.class);
PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
System.out.println("Name: " + p3.getName());
System.out.println("UID: " + p3.getUid());
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
Yuxarıdakı kodda əvvəlcə Class.forName() metodundan istifadə edərək sinfi yükləməliyik . Sonra, ötürülən parametrlərin məlumat növlərinə uyğunlaşdırmaq üçün
getConstructor() metodunu çağıracağıq . Nəhayət,
newInstance() metodunda tələb olunan parametri keçirik ( arqument yoxdursa
null ). newInstance() metodu müvafiq konstruktoru çağırmaqla
PersonTwo sinifinin yeni obyektini qaytaracaq .
Clon() metodundan istifadə etməklə
Clon() metodu
Object sinifinin bir hissəsidir və mövcud obyektin surətini yaratmaq üçün istifadə olunur. Heç bir sinif konstruktorunu çağırmadan sinfin obyektini yaradır. Metodun klonlanması üçün müvafiq sinif marker interfeysi olan
Cloneable interfeysini tətbiq etməlidir. İndi biz Person sinfinin obyektini yaradacağıq və sonra onu
Person sinfinin başqa bir obyektinə klonlayacağıq :
public class Person implements Cloneable {
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
private String name;
private int uid;
public Person(String name, int uid) {
super();
this.name = name;
this.uid = uid;
}
public static void main(String[] args) {
Person p1 = new Person("Ryan", 101);
try {
Person p2 = (Person) p1.clone();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
Qeyd. Klonlanmış obyekt
p2 istinadı vasitəsilə eyni orijinal obyektə istinad edəcək . Bununla belə, klonlanmış obyektin ayrıca yaddaş təyinatı olacaq. Bu o deməkdir ki,
p2 tərəfindən istinad edilən
Person obyektinə edilən hər hansı dəyişiklik p1 tərəfindən istinad edilən orijinal
Şəxsiyyət obyektini dəyişməyəcək . Bunun səbəbi,
clone() metodunun obyektlərin dayaz surətini yaratmasıdır.
Obyektin seriyadan çıxarılmasından istifadə
Obyektin sıradan çıxarılması bir sıra bayt axınından obyektin çıxarılması prosesidir. Serializasiya bunun əksini edir. Onun əsas məqsədi saxlanılan obyekti verilənlər bazasından/şəbəkədən yaddaşa qaytarmaqdır.
Əgər biz obyekti seriallaşdırmaq və ya seriyadan çıxarmaq istəyiriksə, Serializable interfeysini (token interfeysi) həyata keçirməliyik . Aşağıdakı nümunəni nəzərdən keçirin:
public class PersonDriver {
public static void main(String[] args) {
Person p1 = new Person("Max Payne", 101);
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream("link to text file");
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
outputStream.writeObject(p1);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream fileInputStream;
try {
fileInputStream = new FileInputStream("link to text file");
ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
Person p2 = (Person) inputStream.readObject();
System.out.println("Name: " + p2.getName());
System.out.println("UID: " + p2.getUid());
inputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Burada ilk olaraq Person obyektini p1 istinadı ilə mətn faylına seriallaşdırırıq .
writeObject() metodu obyektin bayt axınını mətn faylına yazacaq. Sonra, obyektin seriyadan çıxarılmasından istifadə edərək, biz
Person obyektini yenidən
p2 -ə çıxarırıq . Eynilə,
readObject() metodu obyektin giriş axınından obyekti oxuyacaq.
Nəhayət, Person obyektindən məlumatları konsola çap edəcəyik .
Nəticə
Bu yazıda biz Java-da obyekt yaratmağın müxtəlif yollarını öyrəndik. Əvvəlcə biz ən çox yayılmış üsul olan
new açar sözündən istifadə edərək obyektlərin yaradılmasına baxdıq . Daha sonra biz obyektlər yaratmağın digər məşhur üsulu olan
Class və
Konstruktor siniflərindən
newInstance() metodunu öyrəndik . Sonra biz yeni obyekt yaratmaq əvəzinə mövcud obyektin dayaz surətini yaradan
clone() metodundan istifadə etdik. Nəhayət, biz Java-da obyektlər yaratmaq üçün obyektin seriallaşdırılması və sıradan çıxarılması konsepsiyasından istifadə etdik.
Java-da String to Int - sətri tam ədədə necə çevirmək olar
Mənbə:
FreeCodeCamp Bu gün siz İnteger sinifinin iki metodundan - parseInt() və valueOf() istifadə edərək Java-da sətri tam ədədə çevirməyi öyrənəcəksiniz . Bu, simli dəyişənin dəyərindən istifadə edərək riyazi əməliyyatları yerinə yetirərkən sizə kömək edəcək.
Integer.parseInt istifadə edərək Java-da sətri tam ədədə necə çevirmək olar
Bu seçim
parseInt() metodunun parametr kimi tam ədədə çevirmək üçün sətir götürdüyünü güman edir:
Integer.parseInt(string_varaible)
Onun istifadə nümunəsinə baxmazdan əvvəl gəlin görək heç bir çevrilmə olmadan sətir dəyəri və tam ədəd əlavə etdikdə nə baş verir:
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20);
}
}
Bu kodda biz “10” sətir dəyəri ilə dəyişən
yaş yaratdıq. Tam dəyərə 20 rəqəmini əlavə etdikdə səhvən 30-un düzgün cavabı əvəzinə 1020 aldıq. Bu parseInt
() metodundan istifadə etməklə düzəldilə bilər :
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.parseInt(age);
System.out.println(age_to_int + 20);
}
}
Burada yaş dəyişənini tam ədədə çevirmək üçün biz onu parametr kimi
parseInt() metoduna -
Integer.parseInt(age) keçirdik və age_to_int adlı dəyişəndə saxladıq . İndi başqa bir tam ədədə əlavə edildikdə düzgün əlavəni əldə edirik:
age_to_int + 20 .
Integer.valueOf istifadə edərək Java-da sətri tam ədədə necə çevirmək olar
valueOf() metodu
parseInt() metodu ilə eyni işləyir . Tam ədədə çevrilməsi lazım olan sətri parametr kimi götürür. Budur bir nümunə:
class StrToInt {
public static void main(String[] args) {
String age = "10";
int age_to_int = Integer.valueOf(age);
System.out.println(age_to_int + 20);
}
}
Yuxarıdakı kodda əvvəlki bölmədə olduğu kimi eyni şeyi görə bilərsiniz:
- Biz sətri parametr kimi valueOf() : Integer.valueOf(yaş) ötürdük . O, age_to_int adlı dəyişəndə saxlanılırdı .
- Sonra yaradılmış dəyişənə 10 əlavə etdik: age_to_int + 20 . Nəticə 1020 əvəzinə 30 oldu.
Nəticə
Bu yazıda biz Java-da sətirlərin tam ədədlərə çevrilməsini müzakirə etdik. Sətri tam ədədə çevirmək üçün
Integer sinfinin iki metodundan istifadə edilmişdir -
parseInt() və
valueOf() . Xoşbəxt kodlaşdırma!
GO TO FULL VERSION