Java-da ob'ekt yaratishning turli usullari
Manba:
O'rta Ushbu qo'llanmada biz Java-da ob'ekt yaratishning turli usullarini o'rganamiz. Java obyekti Java sinfining namunasidir. Har bir ob'ektning holati, xatti-harakati va identifikatori mavjud. Maydonlar (o'zgaruvchilar) ob'ektning holatini saqlaydi, usullar (funktsiyalar) esa ob'ektning harakatini ko'rsatadi. Sinflar ish vaqtida ob'ekt namunalari yaratiladigan "loyihalar" bo'lib xizmat qiladi.
Java-da ob'ekt yaratish
Ob'ekt yaratish - bu sinf maydonlarida (o'zgaruvchilar deb ham ataladi) ma'lumotlarni saqlash uchun xotirani ajratish jarayoni. Bu jarayon odatda sinfning namunasini yaratish deb ataladi. Java-da ob'ektlarni yaratishning to'rt xil usuli mavjud:
- new kalit so'zidan foydalanish
- newInstance() usuli
- clone() usuli
- ob'ektni seriyadan chiqarish
Endi aytib o'tilgan usullarning har birini batafsil ko'rib chiqaylik.
Yangi kalit so'z
Bu Java-da ob'ekt yaratishning eng keng tarqalgan usuli.
Yangi kalit so'zi belgilangan turdagi yangi namuna uchun xotira ajratish orqali sinfning namunasini yaratadi. Yangisidan so'ng konstruktor keladi - ob'ektni yaratish va yaratilgan ob'ektning maydonlarini ishga tushirish uchun mas'ul bo'lgan maxsus usul. Ob'ekt
yangi operator bilan yaratiladi va konstruktor bilan ishga tushiriladi.
Yangi operator yordamida Java obyektini yaratish misoli :
Date today = new Date();
Bu ifoda yangi
Date obyektini hosil qiladi (
Sana java.util paketidagi sinfdir ). Koddagi bu bitta band uchta amalni bajaradi: deklaratsiya, instantsiya va ishga tushirish.
Date today - bu o'zgaruvchan deklaratsiya bo'lib, kompilyatorga
bugun Date tipidagi ob'ektga murojaat qilishini bildiradi . Yangi operator
Date sinfini ( xotirada yangi
Date ob'ektini yaratish) instantsiya qiladi va Date() ob'ektni ishga tushiradi. Quyidagi misolni ko'rib chiqing:
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());
}
}
Ushbu koddan biz
new kalit so'zidan foydalangan holda
Person ob'ektini yaratamiz :
- p1 ob'ekti parametrlangan bo'lmagan konstruktorni chaqiradi, o'zgaruvchi nomi qiymati "Maykl Koul" va UID 101 ga o'rnatiladi.
- p2 ob'ekti parametrlangan konstruktorni chaqiradi, u erda "Jon Bodgan" va 102 qiymatini konstruktorga o'tkazadi.Keyin bu qiymatlarga o'zgaruvchi nomi va UID tayinlanadi.
newInstance() usulidan foydalanish
Java'da newInstance() usuli berilgan sinf ob'ektining namunasini dinamik ravishda yaratish uchun ishlatiladi.
newInstance() usulidan ikkita standart foydalanish mavjud :
- java.lang.Class API dan newInstance() usuli
- java.lang.reflect.Constructor API dan newInstance() usuli
Class API dan newInstance() dan foydalanish
Ishlash vaqtida sinf ob'ektini yaratish uchun biz ushbu sinf ob'ektini qaytaradigan Class API-dan
newInstance() usulini chaqirishimiz kerak. java.lang.Class klassining
newInstance() usuli hech qanday parametr yoki argumentni olmaydi va bu sinf uchun argumentsiz konstruktor deb atash mumkin. Keling,
java.lang.Class sinfining
newInstance() usuli yordamida
Person sinfi ob'ektini yaratish uchun bir nechta misol kodini ko'rib chiqaylik :
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 (sinfning to'liq nomi)
Person nomli sinfni yuklaydi , keyin
newInstance() Person tipidagi yangi ob'ektni yaratadi va unga havolani qaytaradi. Endi,
p ga
Person havolasidan foydalanib, biz ma'lum harakatlarni bajarish uchun uning
getters() va
setter() ni chaqirishimiz mumkin . Esda tuting:
- Class.forName() va newIstance() ikkalasi ham try and catch bloklari yoki throws kalit so'zi yordamida qayta ishlanishi kerak bo'lgan istisnolardan foydalanadi .
- Class API-dan newInstance() usuli Java 9-dan beri eskirgan.
Konstruktor API dan newInstance() dan foydalanish
Konstruktor sinfining
newInstance() usuli (
java.lang.reflect.Constructor ) Class sinfining
newInstance() usuliga o'xshaydi , faqat u parametrlangan konstruktorlar uchun parametrlarni qabul qiladi.
Keling, java.lang.reflect.Constructor sinfining
newInstance() usuli yordamida
Person sinfining ob'ektini yaratish orqali ushbu yondashuvni ko'rsatamiz :
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();
}
}
}
Yuqoridagi kodda avval
Class.forName() usuli yordamida sinfni yuklashimiz kerak . Keyinchalik, o'tkazilgan parametrlarning ma'lumotlar turlarini moslashtirish uchun
getConstructor() usulini chaqiramiz . Nihoyat,
newInstance() usulida biz kerakli parametrni o'tkazamiz ( argument bo'lmasa
null ). newInstance() usuli tegishli konstruktorni chaqirish orqali
PersonTwo sinfining yangi ob'ektini qaytaradi .
Clon() usulidan foydalanish
Clone() usuli
Object sinfining bir qismi bo'lib , mavjud ob'ektning nusxasini yaratish uchun ishlatiladi. U hech qanday sinf konstruktorini chaqirmasdan sinf ob'ektini yaratadi. Usulni klonlash uchun tegishli sinf marker interfeysi bo'lgan
Cloneable interfeysini amalga oshirgan bo'lishi kerak. Endi biz Person sinfining ob'ektini yaratamiz va keyin uni
Person sinfining boshqa ob'ektiga klonlaymiz :
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();
}
}
}
Eslatma. Klonlangan ob'ekt
p2 havolasi orqali bir xil asl ob'ektga murojaat qiladi . Biroq, klonlangan ob'ekt alohida xotira topshirig'iga ega bo'ladi. Bu shuni anglatadiki,
p2 tomonidan havola qilingan
Person ob'ektiga kiritilgan har qanday o'zgarishlar p1 tomonidan havola qilingan asl
Person ob'ektini o'zgartirmaydi . Buning sababi,
clone() usuli ob'ektlarning sayoz nusxasini yaratadi.
Ob'ektni seriyadan chiqarishdan foydalanish
Ob'ektni seriyasizlashtirish - ob'ektni bir qator bayt oqimlaridan ajratib olish jarayoni. Serializatsiya buning aksini qiladi. Uning asosiy maqsadi saqlangan ob'ektni ma'lumotlar bazasidan/tarmoqdan xotiraga qaytarishdir. Agar biz ob'ektni ketma-ketlashtirish yoki seriyadan chiqarishni xohlasak, biz
Serializable interfeysini (token interfeysi) amalga oshirishimiz kerak. Quyidagi misolni ko'rib chiqing:
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();
}
}
}
Bu erda biz avval
p1 havolasi bo'yicha
Person ob'ektini matnli faylga seriyalashtiramiz.
writeObject() usuli obyektning bayt oqimini matn fayliga yozadi. Keyin, ob'ektni seriyasizlashtirishdan foydalanib, biz
Person ob'ektini p2 ga qayta chiqaramiz . Xuddi shunday,
readObject() usuli ob'ektni kirish oqimidan ob'ektni o'qiydi.
Nihoyat, biz Person ob'ektidagi ma'lumotlarni konsolga chop qilamiz.
Xulosa
Ushbu maqolada biz Java-da ob'ekt yaratishning turli usullari haqida bilib oldik. Birinchidan, biz eng keng tarqalgan usul bo'lgan
new kalit so'zidan foydalanib ob'ektlarni yaratishni ko'rib chiqdik . Keyin biz ob'ektlarni yaratishning yana bir mashhur usuli bo'lgan
Class va
Constructor sinflaridan
newInstance() usulini o'rgandik. Keyin biz yangi ob'ekt yaratish o'rniga mavjud ob'ektning sayoz nusxasini yaratadigan
clone() usulidan foydalandik. Nihoyat, biz Java-da ob'ektlarni yaratish uchun ob'ektni ketma-ketlashtirish va seriyadan chiqarish tushunchasidan foydalandik.
Java-da String to Int - satrni butun songa qanday aylantirish mumkin
Manba:
FreeCodeCamp Bugun siz Java-da Integer sinfining ikkita usuli - parseInt() va valueOf() yordamida satrni butun songa qanday aylantirishni o'rganasiz . Bu sizga satr o'zgaruvchisining qiymatidan foydalangan holda matematik amallarni bajarishda yordam beradi.
Integer.parseInt yordamida Java-da qatorni butun songa qanday aylantirish mumkin
Ushbu parametr
parseInt() usuli parametr sifatida butun songa aylantirish uchun satrni oladi deb taxmin qiladi:
Integer.parseInt(string_varaible)
Uni ishlatish misolini ko'rib chiqishdan oldin, keling, hech qanday konvertatsiya qilmasdan satr qiymati va butun sonni qo'shganda nima sodir bo'lishini ko'rib chiqaylik:
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20);
}
}
Ushbu kodda biz "10" satr qiymati bilan
yosh o'zgaruvchisini yaratdik. Butun son qiymatiga 20 raqamini qo‘shganda, biz noto‘g‘ri 30 to‘g‘ri javob o‘rniga 1020 ni oldik. Buni parseInt
() usuli yordamida tuzatish mumkin :
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);
}
}
Bu erda yosh o'zgaruvchisini butun songa aylantirish uchun biz uni
parseInt() usuliga parametr sifatida o'tkazdik -
Integer.parseInt(age) va uni age_to_int deb nomlangan o'zgaruvchida saqladik . Endi boshqa butun songa qo'shilganda biz to'g'ri qo'shimchani olamiz:
age_to_int + 20 .
Integer.valueOf yordamida Java-da qatorni butun songa qanday aylantirish mumkin
valueOf() usuli
parseInt() usuli bilan bir xil ishlaydi . Parametr sifatida butun songa aylantirilishi kerak bo'lgan qatorni oladi. Mana bir misol:
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);
}
}
Yuqoridagi kodda oldingi bo'limdagi kabi bir xil narsani ko'rishingiz mumkin:
- Biz satrni valueOf() ga parametr sifatida uzatdik : Integer.valueOf(age) . U age_to_int deb nomlangan o'zgaruvchida saqlangan .
- Keyin yaratilgan o'zgaruvchiga 10 qo'shdik: age_to_int + 20 . Natijada 1020 o‘rniga 30 ta bo‘ldi.
Xulosa
Ushbu maqolada biz Java-da satrlarni butun sonlarga aylantirishni muhokama qildik. Satrni butun songa aylantirish uchun
Integer sinfining ikkita usuli ishlatilgan -
parseInt() va
valueOf() . Baxtli kodlash!
GO TO FULL VERSION