JavaRush /Java блогу /Random-KY /Кофе-брейк №174. Java.String to Int Java'да объект түзүүн...

Кофе-брейк №174. Java.String to Int Java'да объект түзүүнүн ар кандай жолдору - Стринг бүтүн санга кантип айландыруу керек

Группада жарыяланган

Java an objectисин түзүүнүн ар кандай жолдору

Булак: Орто Бул окуу куралында биз Java тorнде an object түзүүнүн ар кандай жолдорун үйрөнөбүз. Кофе-брейк №174.  Java.String to Int Java-да an objectти түзүүнүн ар кандай жолдору - сапты бүтүн санга кантип айландыруу керек - 1Java an objectи Java классынын бир мисалы. Ар бир an objectтин абалы, жүрүм-туруму жана идентификатору бар. Талаалар (өзгөрмөлөр) an objectтин абалын сактайт, ал эми методдор (функциялар) an objectтин аракетин көрсөтөт. Класстар "схемалар" катары кызмат кылат, алардан an object инстанциялары иштөө убагында түзүлөт.

Javaда an object түзүү

Объектти түзүү класс талааларында (өзгөрмөлөр деп да аталат) маалыматтарды сактоо үчүн эстутумду бөлүштүрүү процесси. Бул процесс көбүнчө класстын инстанциясын түзүү деп аталат. Java an objectилерин түзүү үчүн төрт түрдүү жолдору бар:
  1. жаңы ачкыч сөздү колдонуу
  2. newInstance() ыкмасы
  3. clone() ыкмасы
  4. an objectти сериядан чыгаруу
Эми аталган ыкмалардын ар бирин майда-чүйдөсүнө чейин карап көрөлү.

Жаңы ачкыч сөз

Бул Javaда an objectти түзүүнүн эң кеңири таралган жолу. Жаңы ачкыч сөз көрсөтүлгөн түрдөгү жаңы инстанция үчүн эстутум бөлүү аркылуу класстын инстанциясын түзөт. Жаңыдан кийин конструктор келет - an objectти түзүү жана түзүлгөн an objectтин талааларын инициализациялоо үчүн жооптуу атайын ыкма. Объект жаңы оператор менен түзүлүп , конструктор менен инициализацияланат. Бул жерде жаңы оператор менен Java an objectисин түзүүнүн мисалы :
Date today = new Date();
Бул туюнтма жаңы Date an objectисин жаратат ( Date java.util пакетинин ичиндеги класс ). Коддогу бул жалгыз пункт үч операцияны аткарат: жарыялоо, инстанциялоо жана баштоо. Date today - бул өзгөрмө декларация, ал компиляторго бүгүн Date түрүндөгү 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дон биз new ачкыч сөзүн колдонуп Person an objectисин түзөбүз :
  • p1 an objectи өзгөрмө аталышынын мааниси "Майкл Коул" жана UID 101ге коюлган параметри жок конструкторду чакырат.
  • p2 an objectи параметрлештирилген конструкторду чакырат, анда ал конструкторго "Джон Бодган" жана 102 маанисин берет.Ошондо бул маанилерге өзгөрмө аты жана UID ыйгарылат.

newInstance() ыкмасын колдонуу

Javaдагы newInstance() методу берилген класстын an objectинин үлгүсүн динамикалык түрдө түзүү үчүн колдонулат. newInstance() методунун эки стандарттуу колдонулушу бар :
  • java.lang.Class API'ден newInstance() ыкмасы
  • java.lang.reflect.Constructor API'ден newInstance() ыкмасы

Class API'ден newInstance() колдонуу

Иштөө убагында класстын an objectисин түзүү үчүн, ошол класстын an objectин кайтарып турган Class API'ден newInstance() ыкмасын чакырышыбыз керек. java.lang.Class классынын newInstance() методу эч кандай параметрлерди же аргументтерди алbyte жана ал класс үчүн аргументсиз конструктор деп атоого болот. Келгиле, java.lang.Class классынын newInstance() ыкмасын колдонуу менен Person классынын an objectин түзүү үчүн кээ бир мисал codeдорун карап көрөлү :
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() Person түрүндөгү жаңы an objectти түзөт жана ага шилтемени кайтарат. Эми p ге Person шилтемесин колдонуп, белгилүү бир аракеттерди аткаруу үчүн анын getters() жана setter() деп атай алабыз . Эскертүү:
  • Class.forName() жана newIstance() экөө тең try and catch блоктору же throws ачкыч сөзү менен иштетorши керек болгон өзгөчөлүктөрдү ыргытышат .
  • Class API'ден newInstance() ыкмасы Java 9дан бери эскирди.

Constructor API'ден newInstance() колдонуу

Конструктор классынын newInstance() ыкмасы ( java.lang.reflect.Constructor ) Класс классынын newInstance() ыкмасына окшош , бирок ал параметрленген конструкторлор үчүн параметрлерди кабыл алат. Келгиле, бул ыкманы java.lang.reflect.Constructor классынын newInstance() ыкмасын колдонуу менен Person классынын an objectисин түзүү аркылуу көрсөтөлү :
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();
        }

    }
}
Жогорудагы codeдо, адегенде Class.forName() ыкмасын колдонуп классты жүктөөбүз керек . Андан кийин, биз өтүп кеткен параметрлердин маалымат түрлөрүнө дал келүү үчүн getConstructor() ыкмасын чакырабыз . Акырында, newInstance() методунда биз талап кылынган параметрди өткөрөбүз ( эгер аргумент жок болсо null ). newInstance() методу ылайыктуу конструкторду чакыруу менен PersonTwo классынын жаңы an objectисин кайтарат .

clone() ыкмасын колдонуу

clone() методу Object классынын бир бөлүгү болуп саналат жана учурдагы an objectтин көчүрмөсүн түзүү үчүн колдонулат. Ал класстын an objectин эч кандай класс конструкторун чакырбастан түзөт. Методду клондоо үчүн, тиешелүү класс маркер интерфейси болгон Cloneable интерфейсин ишке ашырган болушу керек. Эми биз Person классынын an objectисин түзүп , андан кийин аны Person классынын башка an objectисине клондойбуз :
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 ошол эле баштапкы an objectке p2 шилтемеси аркылуу шилтеме кылат . Бирок, клондолгон an object өзүнчө эстутум тапшырмасына ээ болот. Бул p2 шилтеме кылган Person an objectисине жасалган өзгөртүүлөр p1 шилтеме кылган баштапкы Person an objectисин өзгөртпөйт дегенди билдирет . Себеби clone() методу an objectтердин тайыз көчүрмөсүн түзөт.

Объектти сериядан чыгарууну колдонуу

Объектти сериядан чыгаруу – бир катар byte агымдарынан an objectти чыгаруу процесси. Сериялаштыруу тескерисинче кылат. Анын негизги максаты - сакталган 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();
        }
    }
}
Бул жерде биз алгач Person an objectисин p1 шилтемеси боюнча тексттик файлга сериялаштырабыз. writeObject() методу an objectтин byte агымын текст файлына жазат. Андан кийин, an objectти сериядан чыгарууну колдонуп, биз Person an objectин кайра p2ге чыгарабыз . Ошо сыяктуу эле, readObject() методу an objectтин кириш агымынан an objectти окуйт. Акырында, биз персонал an objectинен консолго маалыматтарды басып чыгарабыз .

Корутунду

Бул макалада биз Javaда an objectти түзүүнүн ар кандай жолдору жөнүндө билдик. Биринчиден, биз эң кеңири таралган ыкма болгон new ачкыч сөзүн колдонуп an objectтерди түзүүнү карадык . Андан кийин биз Класс жана Конструктор класстарынан newInstance() ыкмасын үйрөндүк , бул an objectтерди түзүүнүн дагы бир популярдуу жолу. Андан кийин биз clone() ыкмасын колдондук , ал жаңы an objectти түзүүнүн ордуна бар an objectтин тайыз көчүрмөсүн түзөт. Акырында, биз Javaда an objectтерди түзүү үчүн an objectти сериялаштыруу жана сериядан чыгаруу түшүнүгүн колдондук.

Java'да String to Int - сапты бүтүн санга кантип айландыруу керек

Булак: FreeCodeCamp Бүгүн сиз Java тorнде Integer классынын эки ыкмасын - parseInt() жана valueOf() колдонуп сапты бүтүн санга кантип айландырууну үйрөнөсүз . Бул сизге сап өзгөрмөнүн маанисин колдонуу менен математикалык операцияларды аткарууда жардам берет. Кофе-брейк #174. Различные способы создания an object в Java.String в Int на Java — How преобразовать строку в целое число - 2

Integer.parseInt жардамы менен Java'да сапты бүтүн санга кантип айландырса болот

Бул параметр parseInt() ыкмасы параметр катары бүтүн санга айландыруу үчүн сапты алат деп болжолдойт:
Integer.parseInt(string_varaible)
Аны колдонуунун мисалын карап чыгуудан мурун, сап маанисин жана бүтүн санды эч кандай конversionсыз кошкондо эмне болорун карап көрөлү:
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 .

Integer.valueOf аркылуу Java'да сапты бүтүн санга кантип айландыруу керек

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 тorнде саптарды бүтүн сандарга которууну талкууладык. Сапты бүтүн санга айландыруу үчүн Integer классынын эки ыкмасы колдонулган - parseInt() жана valueOf() . Бактылуу codeдоо!
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION