JavaRush /جاوا بلاگ /Random-SD /ڪافي بريڪ #174. جاوا ۾ شئي ٺاهڻ جا مختلف طريقا

ڪافي بريڪ #174. جاوا ۾ شئي ٺاهڻ جا مختلف طريقا

گروپ ۾ شايع ٿيل

جاوا ۾ اعتراض ٺاهڻ جا مختلف طريقا

ذريعو: ميڊيم هن سبق ۾، اسان سکنداسين مختلف طريقن سان جاوا ۾ اعتراض ٺاهڻ جا. ڪافي بريڪ #174.  جاوا ۾ هڪ شئي ٺاهڻ جا مختلف طريقا. جاوا ۾ String کان Int - هڪ اسٽرنگ کي انٽيجر ۾ ڪيئن بدلجي - 1هڪ جاوا اعتراض جاوا ڪلاس جو هڪ مثال آهي. هر شئي جي هڪ حالت آهي، هڪ رويي، ۽ هڪ سڃاڻپ ڪندڙ. فيلڊز (متغير) ڪنهن شئي جي حالت کي محفوظ ڪن ٿا، جڏهن ته طريقا (فعل) هڪ اعتراض جي عمل کي ڏيکاري ٿو. ڪلاس "بليو پرنٽ" جي طور تي ڪم ڪن ٿا جن مان رن ٽائم تي اعتراض جا مثال ٺاهيا ويندا آهن.

جاوا ۾ هڪ اعتراض ٺاهڻ

آبجیکٹ ٺاھڻ ميموري کي مختص ڪرڻ جو عمل آھي ڊيٽا کي ذخيرو ڪرڻ لاءِ ڪلاس فيلڊز (جنھن کي متغير پڻ سڏيو ويندو آھي). اهو عمل اڪثر ڪري سڏيو ويندو آهي هڪ ڪلاس جو مثال ٺاهڻ. جاوا ۾ شيون ٺاهڻ جا چار مختلف طريقا آهن:
  1. نئون لفظ استعمال ڪندي
  2. طريقو نئون مثال ()
  3. clone() طريقو
  4. ڪنهن شئي کي ختم ڪرڻ
هاڻي اچو ته تفصيل سان ذڪر ڪيل طريقن مان هر هڪ کي ڏسو.

نئون لفظ

هي جاوا ۾ هڪ اعتراض ٺاهڻ جو سڀ کان عام طريقو آهي. نئون لفظ مخصوص قسم جي نئين مثال لاءِ ميموري مختص ڪندي ڪلاس جو هڪ مثال ٺاهي ٿو. نئين کان پوء تعمير ڪندڙ اچي ٿو - هڪ خاص طريقو هڪ اعتراض ٺاهڻ ۽ ٺاهيل اعتراض جي شعبن کي شروع ڪرڻ لاء ذميوار آهي. ھڪڙو اعتراض نئين آپريٽر سان ٺاھيو ويو آھي ۽ ھڪڙي ٺاھيندڙ سان شروع ڪيو ويو آھي. هتي نئين آپريٽر سان جاوا اعتراض ٺاهڻ جو هڪ مثال آهي :
Date today = new Date();
هي اظهار هڪ نئين تاريخ اعتراض ٺاهي ٿو ( تاريخ java.util پيڪيج جي اندر هڪ ڪلاس آهي ). ڪوڊ ۾ هي واحد شق ٽن عملن کي انجام ڏئي ٿو: اعلان، تڪميل، ۽ شروعات. اڄ جي تاريخ هڪ متغير اعلان آهي جيڪو مرتب ڪندڙ کي ٻڌائي ٿو ته اڄ هڪ اعتراض جو حوالو ڏيندو Date . نئون آپريٽر انسٽيٽيو ڪري ٿو Date ڪلاس (ميموري ۾ نئون Date اعتراض ٺاهي )، ۽ Date() اعتراض کي شروع ڪري ٿو. هيٺ ڏنل مثال تي غور ڪريو:
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());
    }
}
هن ڪوڊ مان، اسان نئون لفظ استعمال ڪندي هڪ شخص اعتراض ٺاهيندا آهيون :
  • p1 اعتراض هڪ غير پيراميٽرائزڊ تعمير ڪندڙ کي سڏي ٿو متغير نالي جي قيمت سان "مائيڪل کول" تي سيٽ ڪيو ويو ۽ UID 101 تي سيٽ ڪيو ويو.
  • p2 شئي کي parameterized Constructor سڏين ٿا، جتي اھو "John Bodgan" ۽ 102 جي قدر ٺاھيندڙ کي پاس ڪري ٿو. اھي قيمتون وري ھڪ متغير نالو ۽ UID مقرر ڪيون ويون آھن.

newInstance() طريقو استعمال ڪندي

جاوا ۾ newInstance() طريقو استعمال ڪيو ويندو آهي متحرڪ طور تي ڏنل طبقي جي ڪنهن شئي جو مثال ٺاهي. newInstance() طريقي جا ٻه معياري استعمال آھن :
  • newInstance() طريقو java.lang.Class API مان
  • newInstance() طريقو java.lang.reflect.Constructor API مان

ڪلاس API مان newInstance() استعمال ڪندي

رن ٽائم تي ڪلاس جو اعتراض ٺاھڻ لاءِ، اسان کي ڪلاس API مان newInstance() طريقو سڏڻ گھرجي، جيڪو انھيءَ ڪلاس جو ڪو اعتراض موٽائي ٿو. java.lang.Class ڪلاس جو newInstance() طريقو ڪو به پيرا ميٽرس يا آرگيومينٽ نٿو وٺي ۽ ان کي ان ڪلاس لاءِ no-argument Constructor چئي سگھجي ٿو. اچو ته ڪجهه مثال ڪوڊ ڏسون ته جيئن java.lang.Class ڪلاس جي newInstance() طريقو استعمال ڪندي پرسن ڪلاس جو اعتراض ٺاهيو :
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 ۽ ان ڏانهن هڪ حوالو واپس ڪري ٿو. هاڻي، استعمال ڪندي شخص جي حوالي سان p ، اسان ان کي سڏي سگهون ٿا getters() ۽ setter() ڪجهه ڪمن کي انجام ڏيڻ لاءِ. مهرباني ڪري نوٽ ڪريو:
  • ٻئي Class.forName() ۽ newIstance() اڇلائڻ وارا استثنا آهن جن کي هٿي وٺڻ گهرجي يا ته try and catch blocks يا throws keyword استعمال ڪندي .
  • ڪلاس API مان newInstance() طريقو جاوا 9 کان ختم ڪيو ويو آهي.

استعمال ڪندي newInstance() Constructor API مان

نئين انسٽنس() ڪنسٽرڪٽر ڪلاس جو طريقو ( java.lang.reflect.Constructor ) ڪلاس ڪلاس جي newInstance() طريقي سان ملندڙ جلندڙ آھي ، سواءِ ان جي ته اھو پيرا ميٽرز ٿيل ٺاھيندڙن لاءِ پيرا ميٽر قبول ڪري. اچو ته هن طريقي جو مظاهرو ڪريون پرسن ڪلاس جو هڪ اعتراض ٺاهي java.lang.reflect.Constructor ڪلاس جو newInstance() طريقو استعمال ڪندي :
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() طريقو پاس ڪيل پيٽرولر جي ڊيٽا جي قسمن سان ملائڻ لاء. آخرڪار، نئين انسٽنس () طريقي ۾ اسان گهربل پيٽرولر پاس ڪريون ٿا ( null جيڪڏھن ڪو دليل نه آھي). newInstance() طريقو PersonTwo ڪلاس جو نئون اعتراض واپس ڪندو مناسب ٺاھيندڙ کي ڪال ڪندي.

ڪلون () طريقو استعمال ڪندي

clone() طريقو آبجیکٹ ڪلاس جو حصو آھي ۽ ھڪ موجود شئي جي ڪاپي ٺاھيو وڃي ٿو. اهو ڪنهن به ڪلاس تعمير ڪندڙ کي سڏڻ کان سواءِ ڪلاس جو هڪ اعتراض ٺاهي ٿو. ھڪڙي طريقي کي ڪلون ڪرڻ لاء، لاڳاپيل طبقي کي لازمي طور تي لاڳو ڪيو وڃي Cloneable انٽرفيس ، جيڪو ھڪڙو مارڪر انٽرفيس آھي. ھاڻي اسان پرسن ڪلاس جو ھڪ اعتراض ٺاھينداسين ۽ پوءِ ان کي پرسن ڪلاس جي ڪنھن ٻئي شئي ۾ کلون ڪنداسين :
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();
        }

    }
}
نوٽ. ڪلون ٿيل اعتراض p2 ريفرنس ذريعي ساڳيو اصل اعتراض جو حوالو ڏيندو . بهرحال، ڪلون ٿيل اعتراض کي الڳ ميموري اسائنمينٽ هوندي. هن جو مطلب اهو آهي ته p2 پاران ڏنل شخص اعتراض ۾ ڪيل ڪا به تبديلي p1 جي حوالي سان اصل شخص اعتراض کي تبديل نه ڪندي . اهو ئي سبب آهي ته clone() طريقو شين جي هڪ ٿلهي ڪاپي ٺاهي ٿو.

استعمال ڪندي Object Deserialization

آبجیکٹ ڊيسيريلائيزيشن بائيٽ اسٽريمز جي هڪ سيريز مان ڪنهن شئي کي ڪڍڻ جو عمل آهي. سيريلائيزيشن ان جي ابتڙ آهي. ان جو بنيادي مقصد ڊيٽابيس/نيٽ ورڪ مان ذخيرو ٿيل شئي کي واپس ميموري ۾ واپس آڻڻ آهي. جيڪڏهن اسان ڪنهن شئي کي ترتيب ڏيڻ يا ختم ڪرڻ چاهيون ٿا، اسان کي سيريلائيبل انٽرفيس (ٽوڪن انٽرفيس) کي لاڳو ڪرڻو پوندو. هيٺ ڏنل مثال تي غور ڪريو:
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();
        }
    }
}
هتي اسان پهريون ڀيرو پي 1 جي حوالي سان Person اعتراض کي ٽيڪسٽ فائل ۾ ترتيب ڏيون ٿا. writeObject() طريقو لکندو اعتراض جي بائيٽ اسٽريم کي ٽيڪسٽ فائل ۾. ان کان پوء، آبجیکٹ ڊيسيريلائيزيشن کي استعمال ڪندي، اسان شخص اعتراض کي واپس p2 ۾ ڪڍو . اهڙي طرح، readObject() طريقو هڪ اعتراض کي اعتراض جي ان پٽ اسٽريم مان پڙهي سگهندو. آخرڪار، اسان ڊيٽا کي پرنٽ ڪنداسين شخص اعتراض کان ڪنسول ڏانهن.

نتيجو

هن آرٽيڪل ۾، اسان جاوا ۾ هڪ اعتراض ٺاهڻ جي مختلف طريقن جي باري ۾ سکيو. پهرين، اسان نئين لفظ استعمال ڪندي شيون ٺاهڻ تي غور ڪيو ، جيڪو تمام عام طريقو آهي. اسان وري سکيو newInstance() طريقو Class ۽ Constructor ڪلاسن مان ، جيڪو شيون ٺاهڻ جو ٻيو مشهور طريقو آهي. اسان پوءِ استعمال ڪيو clone() طريقو ، جيڪو نئين شئي ٺاهڻ جي بدران موجوده شئي جي اٿلي ڪاپي ٺاهي ٿو. آخر ۾، اسان جاوا ۾ شيون ٺاهڻ لاء اعتراض سيريلائيزيشن ۽ ڊيسيريلائيزيشن جو تصور استعمال ڪيو.

String to Int جاوا ۾ - ڪيئن بدلجي اسٽرنگ کي انٽيجر ۾

ذريعو: FreeCodeCamp اڄ توهان سکندا ته ڪيئن هڪ اسٽرنگ کي جاوا ۾ انٽيجر ۾ تبديل ڪيو وڃي انٽيجر ڪلاس جا ٻه طريقا - parseInt() ۽ valueOf() . اهو توهان جي مدد ڪندو جڏهن رياضياتي عملن کي انجام ڏيڻ واري اسٽرنگ متغير جي قيمت کي استعمال ڪندي. Кофе-брейк #174. Различные способы создания an object в Java.String в Int на Java — How преобразовать строку в целое число - 2

Integer.parseInt استعمال ڪندي جاوا ۾ اسٽرنگ کي انٽيجر ۾ ڪيئن بدلجي

هي اختيار فرض ڪري ٿو ته parseInt() طريقو هڪ اسٽرنگ وٺندو آهي هڪ انٽيجر ۾ تبديل ڪرڻ لاءِ هڪ پيٽرول جي طور تي:
Integer.parseInt(string_varaible)
ان جي استعمال جو هڪ مثال ڏسڻ کان اڳ، اچو ته ڏسون ته ڇا ٿيندو جڏهن توهان هڪ اسٽرنگ ويليو ۽ انٽيجر کي بغير ڪنهن تبادلي جي شامل ڪندا آهيو:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
هن ڪوڊ ۾، اسان "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) - ۽ ان کي عمر_to_int نالي هڪ متغير ۾ محفوظ ڪيو . ھاڻي جڏھن ڪنھن ٻئي عدد ۾ شامل ڪيو ويو ته اسان کي صحيح اضافو ملندو: age_to_int + 20 .

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
    }
}
مٿي ڏنل ڪوڊ ۾ توهان ساڳئي شيء ڏسي سگهو ٿا جيئن اڳئين حصي ۾:
  • اسان هڪ اسٽرنگ کي پيٽرولر جي طور تي پاس ڪيو valueOf() : Integer.valueOf(age) . اهو عمر_to_int نالي هڪ متغير ۾ ذخيرو ٿيل هو .
  • اسان وري ٺاهيل متغير ۾ 10 شامل ڪيو: age_to_int + 20 . نتيجو 1020 بدران 30 هو.

نتيجو

هن آرٽيڪل ۾، اسان جاوا ۾ اسٽرنگ کي انٽيجرز ۾ تبديل ڪرڻ تي بحث ڪيو. اسٽرنگ کي انٽيجر ۾ تبديل ڪرڻ لاءِ، انٽيجر ڪلاس جا ٻه طريقا استعمال ڪيا ويا - parseInt() ۽ valueOf() . خوش ڪوڊنگ!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION