JavaRush /Java blogi /Random-UZ /Kofe tanaffusi №174. Java-da ob'ekt yaratishning turli us...

Kofe tanaffusi №174. Java-da ob'ekt yaratishning turli usullari. Java-da String to Int - Stringni butun songa qanday aylantirish mumkin

Guruhda nashr etilgan

Java-da ob'ekt yaratishning turli usullari

Manba: O'rta Ushbu qo'llanmada biz Java-da ob'ekt yaratishning turli usullarini o'rganamiz. Kofe tanaffusi №174.  Java-da ob'ekt yaratishning turli usullari. Java-da String to Int - Qanday qilib satrni butun songa aylantirish mumkin - 1Java 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:
  1. new kalit so'zidan foydalanish
  2. newInstance() usuli
  3. clone() usuli
  4. 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;
    }

    // getters and setters...

    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;
    }

   // getters and setters...
    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;
    }

    // getters and setters...
    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) {
            // TODO Auto-generated catch block
            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;
    }

    // getters and setters...

    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. Кофе-брейк #174. Различные способы создания an object в Java.String в Int на Java — How преобразовать строку в целое число - 2

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);
        // 1020
    }
}
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);
        // 30
    }
}
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);
        // 30
    }
}
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!
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION