JavaRush /Java Blogu /Random-AZ /Kofe fasiləsi №174. Java.String-dən Int-ə Java-da obyekt ...

Kofe fasiləsi №174. Java.String-dən Int-ə Java-da obyekt yaratmağın müxtəlif yolları - sətri tam ədədə necə çevirmək olar

Qrupda dərc edilmişdir

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. Kofe fasiləsi №174.  Java-da obyekt yaratmağın müxtəlif yolları. Java-da String to Int - sətri tam ədədə necə çevirmək olar - 1Java 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:
  1. yeni açar sözündən istifadə etməklə
  2. metod newInstance()
  3. clone() metodu
  4. 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;
    }

    // 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());
    }
}
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;
    }

   // 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 (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 pPerson istinadından istifadə edərək müəyyən hərəkətləri yerinə yetirmək üçün onun getters()setter() funksiyalarını çağıra bilərik . Xahiş edirəm qeyd edin:
  • Həm Class.forName() , həm də newIstance() istisnaları ya cəhdtutma 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;
    }

    // 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();
        }

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

    // 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();
        }

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

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);
        // 1020
    }
}
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);
        // 30
    }
}
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);
        // 30
    }
}
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()valueOf() . Xoşbəxt kodlaşdırma!
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION