JavaRush /Блоги Java /Random-TG /Кофе-брейк №174. Роҳҳои гуногуни сохтани объект дар Java....

Кофе-брейк №174. Роҳҳои гуногуни сохтани объект дар Java.String ба Int дар Java - Чӣ тавр табдил додани сатр ба бутун

Дар гурӯҳ нашр шудааст

Роҳҳои гуногуни сохтани an object дар Java

Сарчашма: Миёна Дар ин дарс мо роҳҳои гуногуни сохтани an objectро дар Java меомӯзем. Кофе-брейк №174.  Роҳҳои гуногуни эҷоди an object дар Java.String ба Int дар Java - Чӣ гуна сатрро ба адади бутун табдил додан мумкин аст - 1Объекти Java як мисоли синфи Java мебошад. Ҳар як an object дорои ҳолат, рафтор ва идентификатор мебошад. Майдонҳо (тағйирёбандаҳо) ҳолати an objectро нигоҳ медоранд, дар ҳоле ки усулҳо (функсияҳо) амали an objectро нишон медиҳанд. Синфҳо ҳамчун "нақшаҳо" хидмат мекунанд, ки аз онҳо намунаҳои an object дар вақти корӣ сохта мешаванд.

Эҷоди an object дар Java

Эҷоди an object раванди ҷудо кардани хотира барои нигоҳ доштани маълумот дар майдонҳои синф (инчунин тағирёбанда номида мешавад) мебошад. Ин раванд одатан эҷоди як мисоли синф номида мешавад. Дар Java чор роҳи эҷоди an objectҳо мавҷуданд:
  1. бо истифода аз калимаи нав
  2. усули newInstance()
  3. Усули clone ().
  4. ғайрисериявии an object
Акнун биёед ҳар яке аз усулҳои зикршударо ба таври муфассал дида бароем.

Калимаи нав

Ин роҳи маъмултарини сохтани an object дар Java мебошад. Калимаи калидии нав як мисоли синфро тавассути ҷудо кардани хотира барои мисоли нави навъи муайян эҷод мекунад. Пас аз нав конструктор меояд - усули махсусе, ки барои сохтани an object ва оғоз кардани майдонҳои an objectи сохта масъул аст. Объект бо оператори нав сохта мешавад ва бо конструктор оғоз карда мешавад. Ин аст мисоли сохтани an objectи Java бо оператори нав :
Date today = new Date();
Ин ифода an objectи нави Сана тавлид мекунад ( Сана синф дар дохor пакети java.util аст ). Ин банди ягонаи code се амалро иҷро мекунад: декларатсия, эҷодкунӣ ва оғозёбӣ. Санаи имрӯз як эъломияи тағирёбанда аст, ки ба компилятор хабар медиҳад, ки имрӯз ба an objectи навъи Date муроҷиат мекунад . Оператори нав синфи Date -ро эҷод мекунад (дар хотира an objectи нави Сана эҷод мекунад ) ва Date() an objectро оғоз мекунад. Мисоли зеринро дида бароед:
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());
    }
}
Аз ин code, мо бо истифода аз калимаи нав an objectи Person эҷод мекунем :
  • Объекти p1 конструктори ғайрипараметрӣ бо арзиши номи тағирёбанда ба "Майкл Коул" ва UID ба 101 таъин шудааст, даъват мекунад.
  • Объекти p2 конструктори параметриро даъват мекунад, ки дар он арзиши "Ҷон Бодган" ва 102-ро ба конструктор интиқол медиҳад.Ба ин арзишҳо номи тағирёбанда ва UID таъин карда мешаванд.

Истифодаи усули newInstance().

Усули newInstance() дар Java барои ба таври динамикӣ сохтани мисоли an objectи синфи додашуда истифода мешавад. Ду истифодаи стандартии усули newInstance() вуҷуд дорад :
  • Усули newInstance() аз API java.lang.Class
  • Усули newInstance() аз API java.lang.reflect.Constructor

Истифодаи newInstance() аз API Class

Барои сохтани an objectи синф дар вақти корӣ, мо бояд усули newInstance() -ро аз API Class API даъват кунем, ки an objectи он синфро бармегардонад. Усули newInstance()- и синфи java.lang.Class ягон параметр ё аргумент намегирад ва онро барои он синф созандаи беаргумент номидан мумкин аст. Биёед якчанд мисоли codeро барои сохтани an objectи синфи Person бо истифода аз усули newInstance() синфи java.lang.Class дида бароем :
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 (номи пурраи синф) синферо бо номи Person бор мекунад , пас newInstance() an objectи нави навъи Person эҷод мекунад ва истинодро ба он бармегардонад. Ҳоло, бо истифода аз истинод ба Person ба p , мо метавонем онро барои иҷрои амалҳои муайян getters() ва setter() даъват кунем. Илтимос не:
  • Ҳам Class.forName() ва ҳам newIstance() истисноҳоро мепартоянд, ки бояд бо истифода аз блокҳои try and catch ё калимаи калидии throws коркард карда шаванд .
  • Усули newInstance() аз API Class аз Java 9 бекор карда шудааст.

Истифодаи newInstance() аз API Constructor

Усули newInstance()- и синфи Constructor ( java.lang.reflect.Constructor ) ба усули newInstance()- и синфи Class шабоҳат дорад , ба истиснои он ки он параметрҳоро барои конструкторҳои параметршуда қабул мекунад. Биёед ин равишро тавассути сохтани an objectи синфи Person бо истифода аз усули newInstance() синфи java.lang.reflect.Constructor нишон диҳем :
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();
        }

    }
}
Дар рамзи дар боло овардашуда, аввал мо бояд синфро бо усули Class.forName() бор кунем . Баъдан, мо усули getConstructor()- ро даъват мекунем , то ба намудҳои додаҳои параметрҳои додашуда мувофиқат кунад. Ниҳоят, дар усули newInstance() мо параметри заруриро мегузарем ( агар далел мавҷуд набошад, null ). Усули newInstance() an objectи нави синфи PersonTwo-ро тавассути занги созандаи мувофиқ бармегардонад .

Истифодаи усули clone().

Усули clone() қисми синфи Object буда , барои сохтани нусхаи an objectи мавҷуда истифода мешавад. Он an objectи синфро бидуни даъват ба ягон созандаи синф эҷод мекунад. Барои клон кардани усул, синфи мувофиқ бояд интерфейси Cloneable -ро , ки интерфейси маркер аст, амалӣ карда бошад. Ҳоло мо an objectи синфи Personро эҷод мекунем ва сипас онро ба an objectи дигари синфи Person клон мекунем :
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();
        }

    }
}
Шарҳ. Объекти клоншуда ба ҳамон an objectи аслӣ тавассути истиноди p2 истинод мекунад . Бо вуҷуди ин, an objectи клоншуда таъиноти алоҳидаи хотира дорад. Ин маънои онро дорад, ки ҳама гуна тағйироте, ки ба an objectи Шахсе , ки аз ҷониби p2 истинод шудааст, an objectи аслии Personро , ки аз ҷониби p1 истинод шудааст, тағир намедиҳад . Сабаб дар он аст, ки усули clone() нусхаи ками an objectҳоро эҷод мекунад.

Истифодаи бесериализми an object

Десериализми an object ин раванди истихроҷи an object аз як қатор ҷараёнҳои byteӣ мебошад. Сериализатсия баръакс мекунад. Мақсади асосии он бозпас гирифтани an objectи захирашуда аз пойгоҳи додаҳо/шабака ба хотира мебошад. Агар мо хоҳем, ки an objectро сериализатсия ё ғайрисериясозӣ кунем, мо бояд интерфейси Serializable-ро (интерфейси аломат) татбиқ кунем. Мисоли зеринро дида бароед:
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();
        }
    }
}
Дар ин ҷо мо аввал an objectи Person -ро бо истинод p1 ба файли матнӣ сериал мекунем. Усули writeObject() ҷараёни byteи an objectро ба файли матнӣ менависад. Сипас, бо истифода аз десериализатсияи an object, мо an objectи Шахсиро дубора ба p2 истихроҷ мекунем . Ба ҳамин монанд, усули readObject() an objectро аз ҷараёни вуруди an object мехонад. Дар охир, мо маълумотро аз an objectи Person ба консол чоп мекунем.

Хулоса

Дар ин мақола мо дар бораи роҳҳои гуногуни сохтани an object дар Java фаҳмидем. Аввалан, мо бо истифода аз калимаи нав , ки роҳи маъмултарин аст, сохтани an objectҳоро дида баромадем . Сипас, мо усули newInstance() -ро аз синфҳои Class ва Constructor омӯхтем , ки ин роҳи дигари маъмули сохтани an objectҳост. Баъдан мо усули clone()- ро истифода бурдем , ки ба ҷои сохтани an objectи нав нусхаи ками an objectи мавҷударо эҷод мекунад. Ниҳоят, мо барои сохтани an objectҳо дар Java консепсияи сериализатсия ва бесериализатсияи an objectро истифода кардем.

String to Int дар Java - чӣ гуна табдил додани сатр ба адади бутун

Сарчашма: FreeCodeCamp Имрӯз шумо мефаҳмед, ки чӣ тавр табдил додани сатр ба адади бутун дар Java бо истифода аз ду усули синфи Integer - parseInt() ва valueOf() . Ин ба шумо ҳангоми иҷрои амалҳои математикӣ бо истифода аз арзиши тағирёбандаи сатр кӯмак мекунад. Кофе-брейк №174.  Роҳҳои гуногуни сохтани an object дар Java.String ба Int дар Java - Чӣ тавр табдил додани сатр ба бутун - 2

Тарзи табдил додани сатр ба адади бутун дар Java бо истифода аз Integer.parseInt

Ин хосият тахмин мекунад, ки усули parseInt() сатрро барои табдил додан ба адади бутун ҳамчун параметр мегирад:
Integer.parseInt(string_varaible)
Пеш аз дидани мисоли истифодаи он, биёед бубинем, ки ҳангоми илова кардани арзиши сатр ва адад бе ягон табдилдиҳӣ чӣ мешавад:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
Дар ин code, мо синну соли тағирёбандаро бо арзиши сатри "10" эҷод кардем . Вақте ки мо рақами 20-ро ба арзиши бутун илова кардем, мо хато ба ҷои ҷавоби дурусти 30 1020 гирифтем. Инро бо истифода аз усули parseInt() ислоҳ кардан мумкин аст :
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
    }
}
Дар ин ҷо, барои табдил додани тағирёбандаи синну сол ба адади бутун, мо онро ҳамчун параметр ба усули parseInt() - Integer.parseInt(age) - интиқол додем ва онро дар як тағирёбанда бо номи age_to_int захира кардем . Ҳоло вақте ки ба бутуни дигар илова карда мешавад, мо иловаи дурустро мегирем: age_to_int + 20 .

Чӣ тавр табдил додани сатр ба бутун дар Java бо истифода аз Integer.valueOf

Усули valueOf() ҳамон усули parseInt() кор мекунад . Он ҳамчун параметр сатреро мегирад, ки бояд ба адади бутун табдил дода шавад. Инак як мисол:
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
    }
}
Дар codeи дар боло овардашуда шумо метавонед ҳамон чизеро, ки дар боби қаблӣ дида буд, мебинед:
  • Мо сатрро ҳамчун параметр ба valueOf() гузаштем : Integer.valueOf(age) . Он дар як тағирёбанда бо номи age_to_int нигоҳ дошта шуд .
  • Сипас мо ба тағирёбандаи сохташуда 10 илова кардем: age_to_int + 20 . Натича ба чои 1020 30 нафар буд.

Хулоса

Дар ин мақола мо табдил додани сатрҳоро ба ададҳои бутун дар Java баррасӣ кардем. Барои табдил додани сатр ба адади бутун ду усули синфи Integer истифода шуданд - parseInt() ва valueOf() . Рамзгузории хушбахт!
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION