CodeGym /جاوا بلاگ /Random-SD /10 شيون جيڪي توھان کي ڄاڻڻ جي ضرورت آھي جاوا ۾ جامد تبديل...
John Squirrels
سطح
San Francisco

10 شيون جيڪي توھان کي ڄاڻڻ جي ضرورت آھي جاوا ۾ جامد تبديل ڪندڙ بابت

گروپ ۾ شايع ٿيل
جاوا ۾، جامد تبديليءَ جو مطلب آهي ڪا شيءِ سڌو سنئون طبقي سان لاڳاپيل آهي: جيڪڏهن هڪ فيلڊ جامد آهي، ته پوءِ ان جو تعلق طبقي سان آهي؛ جيڪڏهن هڪ طريقو جامد آهي، ته پوء اهو طبقي سان تعلق رکي ٿو. نتيجي طور، توھان ڪلاس جو نالو استعمال ڪري سگھو ٿا جامد طريقو سڏڻ يا جامد فيلڊ جو حوالو ڏيڻ. مثال طور، جيڪڏهن countفيلڊ ڪلاس ۾ جامد آهي Counter، ان جو مطلب آهي ته توهان هيٺ ڏنل اظهار سان متغير جو حوالو ڪري سگهو ٿا: Counter.count. 10 شيون جيڪي توھان کي ڄاڻڻ جي ضرورت آھي جاوا ۾ جامد تبديل ڪندڙ بابت - 1يقينا، رسائي جي ترميمن کي غور ڪيو وڃي. مثال طور، privateفيلڊ صرف ان طبقي ۾ موجود آهن جن ۾ اهي اعلان ڪيا ويا آهن. ۽ protectedفيلڊ موجود آهن سڀني ڪلاسن لاءِ هڪ پيڪيج اندر، ۽ گڏوگڏ انهن جي سڀني ذيلي ڪلاسن لاءِ پيڪيج کان ٻاهر. فرض ڪريو Counterڪلاس وٽ ھڪڙو جامد increment()طريقو آھي جنھن جو ڪم فيلڊ کي وڌائڻ آھي count. هن طريقي کي سڏڻ لاء، توهان استعمال ڪري سگهو ٿا Counter.increment(). Counterجامد فيلڊ يا طريقي تائين رسائي حاصل ڪرڻ لاءِ ڪلاس جو مثال ٺاهڻ جي ڪا ضرورت ناهي . هي بنيادي فرق آهي جامد (طبقاتي) متغير ۽ طريقن ۽ غير جامد (مثال) متغير ۽ طريقن جي وچ ۾. هڪ اهم نوٽ. اهو نه وساريو ته ڪلاس جا جامد ميمبر سڌو سنئون طبقي سان تعلق رکن ٿا، نه ڪنهن طبقي جي مثال سان. اهو آهي، جامد countمتغير جو قدر سڀني شين لاء ساڳيو هوندو Counter. هن آرٽيڪل ۾، اسان جاوا ۾ جامد موڊيفائر استعمال ڪرڻ جي بنيادي پهلوئن تي نظر وجهنداسين، انهي سان گڏ ڪجهه خاصيتون جيڪي توهان کي اهم پروگرامنگ تصورن کي سمجهڻ ۾ مدد ڪنديون.

ڇا هر پروگرامر کي ڄاڻڻ گهرجي ته جاوا ۾ جامد تبديل ڪندڙ بابت.

هن حصي ۾، اسان جامد طريقن، شعبن، ۽ طبقن کي استعمال ڪرڻ جي مکيه حصن تي نظر رکون ٿا. اچو ته متغيرن سان شروع ڪريون.
  1. توهان هڪ ڪلاس جي غير جامد ميمبرن تائين رسائي نٿا ڪري سگهو جامد حوالي سان، جهڙوڪ جامد طريقو يا بلاڪ. هيٺ ڏنل ڪوڊ گڏ ڪرڻ سان غلطي ٿيندي:

    public class Counter {
    private int count;
    public static void main(String args []) {
       System.out.println(count); //  Compile time error
    }
    }

    هي جاوا پروگرامرز پاران ڪيل سڀ کان عام غلطين مان هڪ آهي، خاص طور تي نوان. جيئن ته mainطريقو جامد آهي ۽ countمتغير نه آهي، printlnطريقي جي اندر استعمال ڪندي main"مرتب وقت جي غلطي" پيدا ڪندو.

  2. مقامي متغيرن جي برعڪس، جامد فيلڊ ۽ طريقا thread safeجاوا ۾ نه آهن. عملي طور تي، هي گھڻن موضوعن واري پروگرامنگ ۾ سيڪيورٽي مسئلن جي اڪثر سببن مان هڪ آهي. انهي ڳالهه تي غور ڪندي ته ڪلاس جو هر مثال هڪ جامد متغير جي ساڳئي ڪاپي جو حوالو ڏئي ٿو، اهڙي متغير کي ڪلاس طرفان محفوظ يا "لاڪ" ڪرڻ جي ضرورت آهي. تنهن ڪري، جڏهن جامد متغير استعمال ڪري رهيا آهيو، پڪ ڪريو ته اهي synchronizedمسئلا کان بچڻ لاء صحيح آهن جهڙوڪ race conditions.

  3. جامد طريقن جو هڪ عملي فائدو آهي ته هر دفعي جڏهن توهان انهن کي سڏڻ چاهيو ته نئين شئي ٺاهڻ جي ضرورت ناهي. هڪ جامد طريقو ڪلاس جو نالو استعمال ڪندي سڏيو وڃي ٿو جيڪو ان کي بيان ڪري ٿو. انهي ڪري اهي طريقا factory۽ utilityطريقن لاء مڪمل آهن. ڪلاس java.lang.Mathهڪ شاندار مثال آهي: تقريبن سڀئي ان جا طريقا جامد آهن. جاوا جي يوٽيلٽي ڪلاس جا نشان لڳل آهن finalساڳئي سبب لاءِ.

  4. ٻيو اهم نقطو اهو آهي ته توهان ( @Override) جامد طريقن کي ختم نه ٿا ڪري سگهو. جيڪڏهن توهان هڪ ۾ اهڙي طريقي جو اعلان ڪيو ٿا subclass، يعني ساڳئي نالي ۽ دستخط سان هڪ طريقو، توهان صرف ان superclassکي ختم ڪرڻ جي بدران "لڪايو" جو طريقو. هن رجحان طور سڃاتو وڃي ٿو method hiding. هن جو مطلب اهو آهي ته جيڪڏهن هڪ جامد طريقو ٻنهي والدين ۽ ٻارن جي طبقن ۾ اعلان ڪيو ويو آهي، جنهن کي سڏيو ويندو آهي هميشه ترتيب واري وقت تي متغير قسم تي ٻڌل هوندو. برعڪس طريقي سان اوور رائيڊنگ، اهڙي طريقن تي عمل نه ڪيو ويندو جڏهن پروگرام هلندي. اچو ته هڪ مثال تي غور ڪريو:

    class Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the parent class / static method");
         }
    }
    
    class Car extends Vehicle {
         public static void kmToMiles(int km) {
              System.out.println("Inside the child class / static method");
         }
    }
    
    public class Demo {
       public static void main(String args []) {
          Vehicle v = new Car();
           v.kmToMiles(10);
      }
    }

    ڪنسول آئوٽ:

    والدين طبقي جي اندر / جامد طريقو

    ڪوڊ واضح طور تي ظاھر ڪري ٿو ته ان حقيقت جي باوجود ته اعتراض ھڪڙو آھي Car، ڪلاس ۾ جامد طريقو Vehicleسڏيو ويندو آھي، ڇاڪاڻ⁠تہ طريقي سان گڏ وقت سڏيو ويندو ھو. ۽ نوٽ ڪريو ته ڪا به تاليف جي غلطي نه هئي!

  5. وڌيڪ ڇا آهي، اعلي سطحي طبقن کان سواء، توهان طبقن کي جامد قرار ڏئي سگهو ٿا. اهڙن طبقن کي سڏيو ويندو آهي nested static classes. اهي بهتر هم آهنگي مهيا ڪرڻ لاء مفيد آهن. nested جامد طبقي جو هڪ شاندار مثال آهي HashMap.Entry، جيڪو اندر اندر ڊيٽا جي جوڙجڪ آهي HashMap. اهو نوٽ ڪرڻ جي قابل آهي ته، اندروني طبقن وانگر، جامد نسٽڊ ڪلاس هڪ الڳ .class فائل ۾ بيان ڪيا ويا آهن. اهڙيءَ طرح، جيڪڏهن توهان پنهنجي مکيه ڪلاس ۾ پنج nested ڪلاسن جو اعلان ڪندا، ته توهان وٽ .class ايڪسٽينشن سان 6 فائلون هونديون. ٻيو مثال اسان جو پنهنجو اعلان آهي Comparator، جيئن ڪلاس AgeComparator۾ عمر جو مقابلو ڪندڙ ( ) Employee.

  6. جامد موڊيفائر پڻ هڪ جامد بلاڪ ۾ بيان ڪري سگهجي ٿو، بهتر طور تي "جامد شروعاتي بلاڪ" طور سڃاتو وڃي ٿو، جيڪو عمل ڪيو ويندو آهي جڏهن ڪلاس لوڊ ڪيو ويندو آهي. جيڪڏهن توهان اهڙي بلاڪ جو اعلان نه ڪيو، جاوا سڀني جامد شعبن کي هڪ واحد لسٽ ۾ گڏ ڪري ٿو ۽ انهن کي شروع ڪري ٿو جڏهن ڪلاس لوڊ ٿئي ٿي. هڪ جامد بلاڪ چيڪ ٿيل استثنان کي اڇلائي نٿو سگهي، پر اهو اڻ چيڪ ٿيل اڇلائي سگھي ٿو. هن معاملي ۾، هڪ ExceptionInInitializerErrorٿيندو. عملي طور تي، ڪنهن به استثنا جيڪو جامد شعبن جي شروعات دوران ٿئي ٿو، جاوا طرفان هن غلطي ۾ لپي ويندا. اهو پڻ سڀ کان وڌيڪ عام سبب آهي NoClassDefFoundError، ڇاڪاڻ ته ڪلاس ياداشت ۾ نه هوندو جڏهن اهو حوالو ڏنو ويندو.

  7. اهو ڄاڻڻ ڪارائتو آهي ته جامد طريقا ڪمپائل ٽائيم تي ڳنڍيل هوندا آهن، ورچوئل يا غير جامد طريقن جي ڳنڍڻ جي برعڪس، جيڪي رن ٽائيم تي ڳنڍيل هوندا آهن جڏهن ڪنهن حقيقي شئي کي سڏيو ويندو آهي. ان جي مطابق، جامد طريقن جاوا ۾ ختم نه ٿي ڪري سگھجي، ڇاڪاڻ ته پوليمورفيزم انهن تي رن ٽائم تي لاڳو نٿو ٿئي. هي هڪ اهم حد آهي جنهن تي غور ڪيو وڃي جڏهن هڪ طريقو جامد بيان ڪيو وڃي. ائين ڪرڻ صرف ان وقت سمجھ ۾ اچي ٿو جڏهن ذيلي ڪلاس ۾ طريقي کي ختم ڪرڻ جي صلاحيت يا ضرورت نه آهي. فيڪٽري جا طريقا ۽ افاديت جا طريقا جامد موڊيفائر جي صحيح استعمال جا سٺا مثال آهن. جوشوا بلوچ ڪيترن ئي فائدن جي نشاندهي ڪري ٿو ته جامد ڪارخاني جا طريقا پنهنجي ڪتاب Effective Java ۾ ڪنسٽرڪٽرز کان وڌيڪ آهن، جيڪو هر جاوا پروگرامر لاءِ لازمي پڙهڻ آهي.

  8. شروعات هڪ جامد بلاڪ جو هڪ اهم پاسو آهي. جامد شعبن يا متغيرن کي شروعاتي ڪلاس کان پوءِ ميموري ۾ لوڊ ڪيو ويندو آهي. شروعات جو حڪم مٿي کان هيٺ تائين آهي، ساڳئي ترتيب ۾ جنهن ۾ اهي جاوا ڪلاس جي سورس فائل ۾ اعلان ڪيا ويا آهن. جيئن ته جامد شعبن کي ٿريڊ-محفوظ انداز ۾ شروع ڪيو ويو آهي، اهو عمل پڻ Singletonنموني کي لاڳو ڪرڻ لاء استعمال ڪيو ويندو آهي. جيڪڏهن توهان ڪجهه سببن جي Enumطور تي استعمال نه ڪري رهيا آهيو Singleton، ته توهان وٽ سٺو متبادل آهي. پر هن معاملي ۾، توهان کي اهو سمجهڻ گهرجي ته هي هڪ "سست" شروعات نه آهي. ان جو مطلب اهو آهي ته جامد فيلڊ شروع ڪئي ويندي جيتوڻيڪ ان کان اڳ ڪنهن جي "پڇڻ" کان اڳ. جيڪڏهن ڪا شئي وسيلا تمام گهڻي يا گهٽ ۾ گهٽ استعمال ٿيل آهي، ته پوءِ ان کي جامد بلاڪ ۾ شروع ڪرڻ توهان جي حق ۾ ڪم نه ڪندو.

  9. سيريلائيزيشن جي دوران، جامد فيلڊ، transientمتغير وانگر، سيريلائيز نه آهن. درحقيقت، جيڪڏهن توهان ڪنهن به ڊيٽا کي هڪ جامد فيلڊ ۾ محفوظ ڪيو ٿا، اهو ان جي ابتدائي (ڊفالٽ) قيمت تي مشتمل هوندو deserialization کان پوء. مثال طور، جيڪڏهن هڪ جامد فيلڊ هڪ آهي int، ان جي قيمت ختم ٿيڻ کان پوء صفر ٿي ويندي. جيڪڏھن ان جو قسم آھي float، قدر ھوندو 0.0. جيڪڏهن فيلڊ هڪ آهي Object، قدر ٿيندو null. ايماندار ٿيڻ لاء، هي جاوا پوزيشن لاء انٽرويو ۾ سيريلائيزيشن بابت اڪثر پڇيا ويا سوالن مان هڪ آهي. ضروري اعتراض واري ڊيٽا کي مستحڪم فيلڊ ۾ ذخيرو نه ڪريو!

  10. آخرڪار، اچو ته جامد درآمد بابت ڳالهايون. هي ترميم ڪندڙ معياري importبيان سان تمام گهڻو عام آهي، پر اهو مختلف آهي ته اهو توهان کي هڪ يا سڀني جامد طبقي ميمبرن کي منتقل ڪرڻ جي اجازت ڏئي ٿو. هڪ دفعو جامد طريقا درآمد ڪيا ويا آهن، انهن کي رسائي سگهجي ٿو ڄڻ ته اهي ساڳئي طبقي ۾ اعلان ڪيا ويا آهن. اهڙي طرح، جامد شعبن کي درآمد ڪندي، اسان انهن تائين رسائي ڪري سگهون ٿا بغير ڪنهن طبقي جو نالو بيان ڪرڻ جي. هي خصوصيت جاوا 1.5 ۾ ظاهر ٿيو ۽ ڪوڊ پڙهڻ جي صلاحيت کي بهتر بڻائي ٿو جڏهن صحيح طريقي سان استعمال ڪيو وڃي. هي تعمير گهڻو ڪري JUnit ٽيسٽن ۾ ملي ٿو، ڇاڪاڻ ته لڳ ڀڳ سڀ ٽيسٽ ڊولپر استعمال ڪن ٿا جامد درآمد جي طريقن جي لاءِ، مثال طور assertEquals()۽ انهن جي اوور لوڊ ٿيل مختلف قسمن.

  11. اهو سڀ ڪجهه هاڻي لاءِ آهي. هر جاوا پروگرامر کي ڄاڻڻ جي ضرورت آهي ته مٿي ڄاڻايل جامد تبديل ڪندڙ جي سڀني حصن کي. هي آرٽيڪل جامد متغير، فيلڊ، طريقن، شروعاتي بلاڪ، ۽ درآمد بابت بنيادي معلومات جو جائزو ورتو. اهو پڻ ڪجهه اهم ملڪيتن کي ڇڪيو آهي جيڪي جاوا پروگرام لکڻ ۽ سمجهڻ لاء ڄاڻڻ ضروري آهن. مون کي اميد آهي ته هر ڊولپر جامد ميمبرن جي مهارت واري استعمال کي پورو ڪندو، ڇاڪاڻ ته اهو سنجيده سافٽ ويئر ڊولپمينٽ لاء تمام ضروري آهي.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION