JavaRush /جاوا بلاگ /Random-UR /جاوا میں آپریٹر کی مثال

جاوا میں آپریٹر کی مثال

گروپ میں شائع ہوا۔
ہیلو! آج ہم آپریٹر کی مثال کے بارے میں بات کریں گے، اس کے استعمال کی مثالیں دیکھیں گے اور اس کے آپریشن سے متعلق کچھ نکات کو چھوئیں گے :) JavaRush کی ابتدائی سطحوں پر، آپ اس آپریٹر کا سامنا کر چکے ہیں۔ کیا آپ کو یاد ہے کہ اس کی ضرورت کیوں ہے؟ اگر نہیں، تو کوئی فرق نہیں پڑتا، آئیے ایک ساتھ یاد رکھیں۔ مثال کے طور پر آپریٹر کو یہ جانچنے کے لیے درکار ہے کہ آیا متغیر X کے ذریعے حوالہ دیا گیا آبجیکٹ کسی کلاس Y سے بنایا گیا تھا۔ ہم اس موضوع پر کیوں واپس آئے؟ سب سے پہلے، کیونکہ اب آپ جاوا میں وراثت کے طریقہ کار اور OOP کے دیگر اصولوں سے بخوبی واقف ہیں۔ instanceof کا موضوع زیادہ واضح ہو جائے گا اور ہم مزید جدید استعمال کے معاملات کو دیکھیں گے۔ جاؤ! انسٹینس آف آپریٹر کیسے کام کرتا ہے - 1آپ کو شاید یاد ہے کہ مثال کے طور پر آپریٹر صحیح لوٹاتا ہے اگر ٹیسٹ صحیح تھا، یا اگر نتیجہ غلط تھا تو غلط ۔ نتیجتاً، یہ اکثر مختلف قسم کے امتحانی حالات ( if…else) میں پایا جاتا ہے۔ آئیے آسان مثالوں سے شروع کریں:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
آپ کے خیال میں کنسول میں آؤٹ پٹ کیا ہوگا؟ ٹھیک ہے، یہ یہاں واضح ہے :) آبجیکٹ хایک انٹیجر ہے، لہذا نتیجہ سچ ہو گا ۔ کنسول آؤٹ پٹ: true آئیے چیک کرنے کی کوشش کریں کہ آیا اس کا تعلق ہے، مثال کے طور پر، String سے:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String);// error!
   }
}
ہمیں ایک غلطی موصول ہوئی ہے۔ اور دھیان دیں: مرتب کرنے والے نے کوڈ پر عمل درآمد سے پہلے ہی اسے جاری کیا! اس نے فوراً دیکھا کہ انٹیجر اور سٹرنگ خود بخود ایک دوسرے میں تبدیل نہیں ہو سکتے اور ان میں وراثتی تعلقات نہیں ہیں۔ لہذا، سٹرنگ سے انٹیجر کلاس آبجیکٹ نہیں بنایا جائے گا۔ یہ آسان ہے اور پروگرام کے عمل کے دوران پہلے سے ہی عجیب و غریب غلطیوں سے بچنے میں مدد کرتا ہے، لہذا مرتب کرنے والے نے یہاں ہماری مدد کی :) اب آئیے مزید پیچیدہ مثالوں کو دیکھنے کی کوشش کرتے ہیں۔ چونکہ ہم نے وراثت کا ذکر کیا ہے، آئیے اس چھوٹے طبقاتی نظام کے ساتھ کام کریں:
public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
ہم پہلے ہی جانتے ہیں کہ مثال کے طور پر کیسا برتاؤ ہوتا ہے جب ہم یہ جانچتے ہیں کہ آیا کوئی چیز عام حالت میں کسی کلاس سے تعلق رکھتی ہے، لیکن اگر ہم یہاں والدین اور بچے کا رشتہ شامل کریں تو کیا ہوگا؟ انسٹینس آف آپریٹر کیسے کام کرتا ہے - 2 مثال کے طور پر، آپ کے خیال میں درج ذیل چیک سے کیا نکلے گا:
public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();

       System.out.println(cat instanceof Animal);

       System.out.println(cat instanceof MaineCoon);

   }
}
آؤٹ پٹ: سچی غلط بنیادی سوال جس کا جواب دینا ضروری ہے وہ یہ ہے کہ مثال "کلاس کی بنیاد پر تخلیق کردہ شے" کے تصور کو کیسے سمجھتی ہے؟ نتیجے کے طور پر، ہمیں یہ مل گیا Сat instanceof Animal == true، لیکن اس طرح کی تشکیل میں کوئی غلطی تلاش کرسکتا ہے۔ یہ اعتراض Catکلاس کی بنیاد پر کیوں بنایا گیا ہے Animal؟ کیا یہ صرف اپنے طبقے کی بنیاد پر نہیں بنایا گیا؟ جواب بہت آسان ہے، اور ہو سکتا ہے آپ کو پہلے ہی پتہ چل گیا ہو۔ اس ترتیب کو یاد رکھیں جس میں کنسٹرکٹرز کو بلایا جاتا ہے اور کسی چیز کو بناتے وقت متغیرات شروع کیے جاتے ہیں۔ ہم کلاس کنسٹرکٹر کے بارے میں مضمون میں پہلے ہی اس موضوع کا احاطہ کر چکے ہیں ۔ اس لیکچر سے ایک مثال یہ ہے:
public class Animal {

   String brain = "The initial value of brain in the Animal class";
   String heart = "The initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("The constructor of the Animal base class is being executed");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("The current value of the static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in class Animal = " + this.brain);
       System.out.println("Current value of heart in class Animal = " + this.heart);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor completed!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

class Cat extends Animal {

   String tail = "The initial value of tail in the Cat class";

   static int catsCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
       System.out.println("The current value of the static variable catsCount = " + catsCount);
       System.out.println("Current value tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
اور اگر آپ اسے IDE میں چلاتے ہیں تو کنسول آؤٹ پٹ اس طرح نظر آئے گا: بیس کلاس اینیمل کا کنسٹرکٹر چل رہا ہے۔ کیا اینیمل کلاس کے متغیرات پہلے ہی شروع ہو چکے ہیں؟ جامد متغیر کی موجودہ قیمت اینیمل کاؤنٹ = 7700000 اینیمل کلاس میں دماغ کی موجودہ قیمت = اینیمل کلاس میں دماغ کی ابتدائی ویلیو اینیمل کلاس میں دل کی کرنٹ ویلیو = اینیمل کلاس میں دل کی ابتدائی ویلیو بیس اینیمل کلاس کا کنسٹرکٹر اپنا کام مکمل کر لیا ہے! دماغ کی موجودہ قیمت = دماغ کی موجودہ قیمت دل کی موجودہ قیمت = دل کیٹ کلاس کے کنسٹرکٹر نے کام کرنا شروع کر دیا ہے (جانور کنسٹرکٹر پہلے ہی کام کر چکا ہے) جامد متغیر کی موجودہ قیمت catsCount = 37 دم کی موجودہ قیمت = دم کی ابتدائی قیمت کیٹ کلاس ٹیل کی موجودہ قیمت = دم کیا آپ کو اب یاد ہے؟ :) بیس کلاس کنسٹرکٹر، اگر کوئی ہے تو، کسی بھی چیز کو بناتے وقت ہمیشہ پہلے کہا جاتا ہے۔ Instanceof اس اصول کی پیروی کرتا ہے جب یہ اس بات کا تعین کرنے کی کوشش کرتا ہے کہ آیا کوئی شے Аکسی کلاس سے بنائی گئی تھی Б۔ اگر بیس کلاس کنسٹرکٹر کہا جائے تو کوئی شک نہیں رہ سکتا۔ دوسری جانچ کے ساتھ سب کچھ آسان ہے:
System.out.println(cat instanceof MaineCoon);
تخلیق کرتے وقت کنسٹرکٹر کو MaineCoonنہیں بلایا گیا تھا Cat، جو کہ منطقی ہے۔ سب کے بعد، MaineCoonوہ ایک نسل ہے Cat، ایک باپ دادا نہیں. لیکن Catیہ اس کے لیے کوئی ٹیمپلیٹ نہیں ہے۔ ٹھیک ہے، یہ واضح لگتا ہے. اگر ہم ایسا کرتے ہیں تو کیا ہوگا:
public class Main {

   public static void main(String[] args) {

       Cat cat = new MaineCoon();

       System.out.println(cat instanceof Cat);
       System.out.println(cat instanceof MaineCoon);


   }
}
ہمم... یہ زیادہ پیچیدہ ہے۔ آئیے استدلال کرنے کی کوشش کرتے ہیں۔ ہمارے پاس قسم کا ایک متغیر ہے Cat، اور ہم نے اسے قسم کا ایک آبجیکٹ تفویض کیا ہے MaineCoon۔ ویسے یہ کام بھی کیوں کرتا ہے؟ کیا ایسا کرنا ممکن ہے؟ کر سکتے ہیں۔ بہر حال ، کوئی بھی مین کوون ایک بلی ہے۔ اگر یہ مکمل طور پر واضح نہیں ہے تو، قدیم قسم کی توسیع کے ساتھ مثال کو یاد رکھیں:
public class Main {

   public static void main(String[] args) {

       long x = 1024;

   }
}
نمبر 1024 مختصر ہے : یہ طویل متغیر میں آسانی سے فٹ ہوجاتا ہے ، کیونکہ بائٹس کی تعداد اس کے لیے کافی ہے (گھوںسلا کرنے والی گڑیا کی مثال یاد رکھیں؟) ایک چائلڈ آبجیکٹ کو ہمیشہ ایک آبجیکٹ متغیر کو تفویض کیا جاسکتا ہے۔ بس اسے ابھی کے لیے یاد رکھیں، اور اگلے لیکچرز میں ہم اس عمل کا مزید تجزیہ کریں گے۔ تو ہماری مثال کیا پیدا کرے گی؟
Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
مثال کے طور پر کیا چیک کریں گے: ہمارا کلاس متغیر Catیا ہمارا کلاس آبجیکٹ MaineCoon؟ دراصل، اس سوال کا جواب بہت سادہ ہے۔ آپ کو صرف ہمارے آپریٹر کی تعریف کو دوبارہ پڑھنے کی ضرورت ہے: آپریٹر کی مثال کو یہ جانچنے کے لیے درکار ہے کہ آیا متغیر کے ذریعہ حوالہ دیا گیا آبجیکٹ Xکچھ کلاس کی بنیاد پر بنایا گیا تھا Y۔ مثال کے طور پر آپریٹر کسی چیز کی اصلیت کو چیک کرتا ہے، متغیر کی نہیں۔ لہذا، مثال کے طور پر، دونوں بار یہ کنسول میں سچ دکھائے گا : ہمارے پاس قسم کی ایک چیز ہے MaineCoon۔ قدرتی طور پر، یہ کلاس کی بنیاد پر بنایا گیا تھا MaineCoon، بلکہ پیرنٹ کلاس کی بنیاد پر Catبھی!
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION