JavaRush /Java Blog /Random-TK /Kofe arakesmesi # 174. Java-da bir obýekt döretmegiň dürl...

Kofe arakesmesi # 174. Java-da bir obýekt döretmegiň dürli ýollary. Java-da Int-a geçmek

Toparda çap edildi

Java-da obýekt döretmegiň dürli ýollary

Çeşme: Orta Bu gollanmada Java-da obýekt döretmegiň dürli usullaryny öwreneris. Kofe arakesmesi # 174.  Java-da obýekt döretmegiň dürli ýollary. Java-da Int-a geçmek - Setiri bitewi sanlara nädip öwürmeli - 1Java obýekti Java synpynyň mysalydyr. Her bir obýektiň ýagdaýy, özüni alyp barşy we kesgitleýjisi bar. Meýdanlar (üýtgeýjiler) obýektiň ýagdaýyny saklaýar, usullar (funksiýalar) obýektiň hereketini görkezýär. Sapaklar “iş meýilnamasy” bolup, iş wagtynda obýekt mysallary döredilýär.

Java-da obýekt döretmek

Obýektiň döredilmegi, synp meýdançalarynda maglumatlary saklamak üçin ýady bölmek prosesi (üýtgeýjiler hem diýilýär). Bu proses köplenç synpyň mysalyny döretmek diýilýär. Java-da obýekt döretmegiň dört dürli usuly bar:
  1. täze açar söz ulanyp
  2. usuly täzeInstance ()
  3. klon () usuly
  4. obýekti deserializasiýa etmek
Indi agzalan usullaryň hersine jikme-jik seredeliň.

Täze açar söz

Java-da obýekt döretmegiň iň ýaýran usuly. Täze açar söz, görkezilen görnüşiň täze mysaly üçin ýady bölüp, synpyň mysalyny döredýär. Täze gelensoň, konstruktor - obýekt döretmek we döredilen obýektiň meýdanlaryny başlamak üçin jogapkär ýörite usul. Bir obýekt täze operator bilen döredilýär we konstruktor bilen başlaýar. Ine, täze operator bilen Java obýektini döretmegiň mysaly :
Date today = new Date();
Bu aňlatma täze Sene obýektini döredýär ( Sene java.util paketiniň içindäki synpdyr ). Koddaky bu ýekeje söz üç amaly ýerine ýetirýär: beýannama, dessine we başlangyç. Sene şu gün üýtgeýän beýannama bolup, düzüjä şu gün Sene görnüşiniň obýektine degişlidigini habar berýär . Täze operator Sene synpyny dessine ( ýatda täze Sene obýektini döretmek), we Sene () obýekti başlaýar. Aşakdaky mysala serediň:
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 täze açar söz ulanyp, Şahsy obýekt döredýäris :
  • P1 obýekti, “Maýkl Kol” we UID 101-e düzülen üýtgeýän at bahasy bilen parametrleşdirilmedik konstruktor çagyrýar.
  • P2 obýekt parametrleşdirilen konstruktory çagyrýar, ol ýerde “Jon Bodgan” we 102 bahasyny konstruktora geçirýär.Bu bahalara üýtgeýän at we UID berilýär.

NewInstance () usulyny ulanmak

Java-daky newInstance () usuly , belli bir synpyň obýektiniň mysalyny dinamiki döretmek üçin ulanylýar. NewInstance () usulynyň iki sany standart ulanylyşy bar :
  • java.lang.Class API -den newInstance () usuly
  • java.lang.reflect.Constructor API -den newInstance () usuly

Class API-den newInstance () ulanmak

Iş wagty synpyň obýektini döretmek üçin, şol synpyň obýektini gaýtaryp berýän Class API-den newInstance () usulyny çagyrmalydyrys. Java.lang.Class synpynyň täzeInstance () usuly hiç hili parametr ýa-da argument almaýar we bu synp üçin argumentsiz konstruktor diýip atlandyryp bolar. Java.lang.Class synpynyň newInstance () usulyny ulanyp, Şahsy synpyň obýektini döretmek üçin käbir mysal koduna seredeliň :
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 (synpyň doly hünärli ady) Şahs atly bir klasy ýükleýär , soň newInstance () adam görnüşli täze obýekt döredýär we oňa salgylanma berýär. Indi, “Şahsyýet salgylanmasyny ulanyp, käbir hereketleri ýerine ýetirmek üçin alýanlara () we setter () çagyryp bileris . Üns beriň:
  • Class.forName () we newIstance () ikisi hem synanyşyk we tutmak bloklary ýa-da açar söz atmak arkaly çözülmeli kadadan çykmalar .
  • Class API-den täzeInstance () usuly Java 9-dan bäri köneldi.

Constructor API-den newInstance () ulanmak

Konstruktor synpynyň ( java.lang.reflect.Constructor ) täzeInstance () usuly , parametrleşdirilen konstruktorlaryň parametrlerini kabul edýändiginden başga, synp synpynyň täzeInstance () usulyna meňzeýär . Geliň, java.lang.reflect.Constructor synpynyň newInstance () usulyny ulanyp , Şahsy synpyň obýektini döretmek arkaly bu çemeleşmäni görkezeliň :
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();
        }

    }
}
Aboveokardaky kodda ilki bilen Class.forName () usuly bilen synpy ýüklemeli . Ondan soň, geçen parametrleriň maglumat görnüşlerine gabat gelmek üçin getConstructor () usulyny çagyrarys . Ahyrynda, täzeInstance () usulynda zerur parametrden geçýäris ( argument ýok bolsa null ). TäzeInstance () usuly, degişli konstruktory çagyryp, PersonTwo synpynyň täze obýektini yzyna getirer .

Klon () usulyny ulanmak

Klon () usuly Obýekt synpynyň bir bölegi bolup , bar bolan obýektiň göçürmesini döretmek üçin ulanylýar. Haýsydyr bir synp konstruktoryny çagyrman synpyň obýektini döredýär. Usuly klonlamak üçin degişli synp marker interfeýsi bolan “Cloneable” interfeýsini durmuşa geçiren bolmaly. Indi Şahsy synpyň obýektini dörederis , soňra bolsa Şahsy synpyň başga bir obýektine klonlaşdyrarys :
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();
        }

    }
}
Bellik. Klonlaşdyrylan obýekt p2 salgylanmasy arkaly şol bir asyl obýekti görkezer . Şeýle-de bolsa, klonlanan obýektiň aýratyn ýat belligi bolar. Bu, p2 salgylanylýan Şahsy obýektde edilen islendik üýtgeşmeleriň, p1 bilen görkezilen asyl Şahsy obýektini üýtgetmejekdigini aňladýar . Sebäbi klon () usuly obýektleriň ýalpak nusgasyny döredýär.

Obýektiň deserializasiýasyny ulanmak

Obýektiň deserializasiýasy, bir topar baýt akymlaryndan bir jisimi çykarmak prosesi. Serializasiýa tersine. Esasy maksady, maglumatlar bazasyndan / ulgamdan saklanan obýekti ýada salmak. Bir obýekti seriallaşdyrmak ýa-da deserializasiýa etmek islesek, Serializable interfeýsini (token interfeýsi) durmuşa geçirmeli. Aşakdaky mysala serediň:
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 ýerde ilki bilen p1 salgy bilen tekst faýlyna Şahsy obýekti seriallaşdyrýarys . WritObject () usuly obýektiň baýt akymyny tekst faýlyna ýazar. Soň bolsa, obýektiň deserializasiýasyny ulanyp, Şahsy obýekti p2 -e çykarýarys . Edil şonuň ýaly, readObject () usuly obýektiň giriş akymyndan bir obýekti okar. Ahyrynda, Şahsy obýektden maglumatlary konsola çap ederis .

Netije

Bu makalada Java-da obýekt döretmegiň dürli ýollary barada öwrendik. Ilki bilen, iň giň ýaýran usul bolan täze açar söz ulanyp obýektleri döretmäge seretdik . Soňra obýektleri döretmegiň başga bir meşhur usuly bolan Klass we konstruktor synplaryndan täzeInstance () usulyny öwrendik . Soňra täze obýekt döretmegiň ýerine bar bolan obýektiň ýalňyş göçürmesini döredýän klon () usulyny ulandyk . Ahyrynda, Java-da obýektler döretmek üçin obýektleriň seriallaşdyrylmagy we deserializasiýa düşünjesini ulandyk.

Java-da Int-a setir - setiri nädip bitewi sanlara öwürmeli

Çeşme: FreeCodeCamp Bu gün Integer synpynyň iki usuly - parseInt () we valueOf () ulanyp, bir setiri Java-da bitewi sanlara öwürmegiň usullaryny öwrenersiňiz . Setir üýtgeýjisiniň bahasyny ulanyp, matematiki amallary ýerine ýetireniňizde bu size kömek eder. Kofe arakesmesi # 174.  Java-da obýekt döretmegiň dürli ýollary

Integer.parseInt ulanyp, setiri Java-da bitewi sanlara nädip öwürmeli

Bu opsiýa, parseInt () usulynyň bitewi bir bitewi parametr hökmünde öwürmek üçin setir alýandygyny göz öňünde tutýar:
Integer.parseInt(string_varaible)
Ulanylyşynyň mysalyna göz aýlamazdan ozal, hiç hili öwrülişiksiz setir bahasy we bitewi san goşanyňyzda nämeleriň bolýandygyny göreliň:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
Bu kodda, “10” setir bahasy bilen üýtgeýän ýaşy döretdik . 20-nji belgini bitewi baha goşanymyzda, 30-yň dogry jogabynyň ýerine ýalňyşlyk bilen 1020 aldyk. Muny parseInt () usuly bilen düzedip bolar :
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 ýerde ýaş üýtgeýjisini bitewi sana öwürmek üçin ony parseInt () usulyna - Integer.parseInt (ýaş) parametrine geçirdik we ony age_to_int atly üýtgeýjide sakladyk . Indi başga bir bitewi san goşulanda dogry goşmaçany alarys: age_to_int + 20 .

Integer.valueOf ulanyp, setiri Java-da bitewi sanlara nädip öwürmeli

ValueOf () usuly parseInt () usuly bilen işleýär . Parametr hökmünde bitewi sanlara öwrülmeli setir gerek. Ine bir mysal:
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
    }
}
Aboveokardaky kodda, öňki bölümdäki ýaly zady görüp bilersiňiz:
  • ValueOf () : Integer.valueOf (ýaş) üçin parametr hökmünde bir setir geçirdik . Age_to_int atly üýtgeýjide saklandy .
  • Soňra döredilen üýtgeýjä 10 goşduk: age_to_int + 20 . Netije 1020-e derek 30 boldy.

Netije

Bu makalada setirleri Java-da bitewi sanlara öwürmek barada maslahat etdik. Setiri bitewi sanlara öwürmek üçin Integer synpynyň iki usuly ulanyldy - parseInt () we valueOf () . Kodlaşdyrmak gutly bolsun!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION