CodeGym /جاوا بلاگ /Random-UR /10 چیزیں جو آپ کو جاوا میں جامد ترمیم کنندہ کے بارے میں ج...
John Squirrels
سطح
San Francisco

10 چیزیں جو آپ کو جاوا میں جامد ترمیم کنندہ کے بارے میں جاننے کی ضرورت ہے۔

گروپ میں شائع ہوا۔
جاوا میں، static modifier کا مطلب ہے کہ کوئی چیز براہ راست کلاس سے متعلق ہے: اگر کوئی فیلڈ سٹیٹک ہے، تو اس کا تعلق کلاس سے ہے۔ اگر کوئی طریقہ جامد ہے، تو اس کا تعلق کلاس سے ہے۔ نتیجے کے طور پر، آپ کلاس کے نام کو جامد طریقہ کار کو کال کرنے یا جامد فیلڈ کا حوالہ دینے کے لیے استعمال کر سکتے ہیں۔ مثال کے طور پر، اگر کلاس 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);
      }
    }

    کنسول آؤٹ پٹ:

    پیرنٹ کلاس / جامد طریقہ کے اندر

    کوڈ واضح طور پر ظاہر کرتا ہے کہ اس حقیقت کے باوجود کہ آبجیکٹ a ہے Car، کلاس میں جامد طریقہ کو Vehicleکہا جاتا ہے، کیونکہ اس طریقہ کو کمپائل کے وقت بلایا گیا تھا۔ اور نوٹ کریں کہ تالیف کی کوئی غلطیاں نہیں تھیں!

  5. مزید کیا ہے، اعلی درجے کی کلاسوں کے علاوہ، آپ کلاسوں کو جامد قرار دے سکتے ہیں۔ ایسی کلاسوں کو کہا جاتا ہے nested static classes۔ وہ بہتر ہم آہنگی فراہم کرنے کے لیے مفید ہیں۔ نیسٹڈ سٹیٹک کلاس کی ایک شاندار مثال ہے HashMap.Entry، جو کہ اندر موجود ڈیٹا کا ڈھانچہ ہے HashMap۔ یہ بات قابل غور ہے کہ، اندرونی کلاسز کی طرح، سٹیٹک نیسٹڈ کلاسز کا اعلان ایک علیحدہ .class فائل میں کیا جاتا ہے۔ اس طرح، اگر آپ اپنی مین کلاس میں پانچ نیسٹڈ کلاسز کا اعلان کرتے ہیں، تو آپ کے پاس کلاس ایکسٹینشن کے ساتھ 6 فائلیں ہوں گی۔ ایک اور مثال ہمارا اپنا اعلان ہے Comparator، جیسے کہ کلاس AgeComparatorمیں عمر کا موازنہ کرنے والا ( ) ۔Employee

  6. جامد ترمیم کنندہ کو ایک جامد بلاک میں بھی بیان کیا جا سکتا ہے، جسے "سٹیٹک انیشیلائزیشن بلاک" کے نام سے جانا جاتا ہے، جو کلاس کے لوڈ ہونے پر عمل میں لایا جاتا ہے۔ اگر آپ اس طرح کے بلاک کا اعلان نہیں کرتے ہیں، تو جاوا تمام جامد فیلڈز کو ایک فہرست میں جمع کرتا ہے اور کلاس لوڈ ہونے پر انہیں شروع کرتا ہے۔ ایک جامد بلاک چیک شدہ مستثنیات کو نہیں پھینک سکتا، لیکن یہ غیر چیک شدہ کو پھینک سکتا ہے۔ اس صورت میں، ایک ExceptionInInitializerErrorواقع ہو جائے گا. عملی طور پر، کوئی بھی استثناء جو جامد فیلڈز کے آغاز کے دوران ہوتا ہے جاوا کے ذریعہ اس غلطی میں لپیٹ دیا جائے گا۔ یہ اس کی سب سے عام وجہ بھی ہے NoClassDefFoundError، کیوں کہ جب اس کا حوالہ دیا جائے گا تو کلاس میموری میں نہیں ہوگی۔

  7. یہ جاننا مفید ہے کہ جامد طریقے کمپائل کے وقت منسلک ہوتے ہیں، ورچوئل یا غیر جامد طریقوں کے لنک کرنے کے برعکس، جو کہ رن ٹائم پر منسلک ہوتے ہیں جب کسی حقیقی چیز پر کال کی جاتی ہے۔ اس کے مطابق، جاوا میں جامد طریقوں کو اوور رائڈ نہیں کیا جا سکتا، کیونکہ پولیمورفزم ان پر رن ​​ٹائم پر لاگو نہیں ہوتا ہے۔ کسی طریقہ کو جامد قرار دیتے وقت اس پر غور کرنے کی ایک اہم حد ہے۔ ایسا کرنا تبھی سمجھ میں آتا ہے جب کسی ذیلی طبقے میں طریقہ کو اوور رائڈ کرنے کی صلاحیت یا ضرورت نہ ہو۔ فیکٹری کے طریقے اور افادیت کے طریقے سٹیٹک موڈیفائر کے صحیح استعمال کی اچھی مثالیں ہیں۔ جوشوا بلوچ نے اپنی کتاب Effective Java میں متعدد فوائد کی نشاندہی کی ہے جو جامد فیکٹری کے طریقوں کے کنسٹرکٹرز سے زیادہ ہیں، جو ہر جاوا پروگرامر کے لیے لازمی پڑھنا ہے۔

  8. ابتداء ایک جامد بلاک کا ایک اہم پہلو ہے۔ کلاس کے میموری میں لوڈ ہونے کے بعد جامد فیلڈز یا متغیرات شروع کیے جاتے ہیں۔ ابتدا کی ترتیب اوپر سے نیچے تک اسی ترتیب میں ہے جس میں جاوا کلاس کی سورس فائل میں ان کا اعلان کیا گیا ہے۔ چونکہ جامد فیلڈز کو تھریڈ سیف طریقے سے شروع کیا جاتا ہے، اس لیے اس عمل کو Singletonپیٹرن کو لاگو کرنے کے لیے بھی استعمال کیا جاتا ہے۔ اگر آپ کسی وجہ سے Enumبطور استعمال نہیں کر رہے ہیں Singleton، تو آپ کے پاس ایک اچھا متبادل ہے۔ لیکن اس معاملے میں، آپ کو اس بات کا خیال رکھنا چاہیے کہ یہ ایک "سست" ابتدا نہیں ہے۔ اس کا مطلب یہ ہے کہ جامد فیلڈ کو شروع کیا جائے گا یہاں تک کہ اس سے پہلے کہ کوئی اس کے "پوچھے"۔ اگر کوئی چیز وسائل سے بھری ہوئی ہے یا شاذ و نادر ہی استعمال ہوتی ہے، تو اسے جامد بلاک میں شروع کرنا آپ کے حق میں کام نہیں کرے گا۔

  9. سیریلائزیشن کے دوران، جامد فیلڈز، جیسے transientمتغیر، کو سیریلائز نہیں کیا جاتا ہے۔ درحقیقت، اگر آپ کسی بھی ڈیٹا کو جامد فیلڈ میں محفوظ کرتے ہیں، تو اس میں ڈی سیریلائزیشن کے بعد اس کی ابتدائی (ڈیفالٹ) قدر ہوگی۔ مثال کے طور پر، اگر ایک جامد فیلڈ ایک ہے int، تو ڈیسیریلائزیشن کے بعد اس کی قدر صفر ہوگی۔ اگر اس کی قسم ہے تو float، قدر 0.0 ہوگی۔ اگر فیلڈ ایک ہے Objectتو، قدر ہوگی null۔ سچ پوچھیں تو یہ جاوا پوزیشنز کے لیے انٹرویوز میں سیریلائزیشن کے بارے میں اکثر پوچھے جانے والے سوالات میں سے ایک ہے۔ ایک مستحکم فیلڈ میں ضروری آبجیکٹ ڈیٹا کو ذخیرہ نہ کریں!

  10. آخر میں، آئیے جامد درآمد کے بارے میں بات کرتے ہیں۔ اس ترمیم کار میں معیاری بیان کے ساتھ بہت کچھ مشترک ہے import، لیکن یہ اس لحاظ سے مختلف ہے کہ یہ آپ کو ایک یا تمام جامد کلاس ممبران کو درآمد کرنے دیتا ہے۔ ایک بار جامد طریقوں کو درآمد کرنے کے بعد، ان تک رسائی حاصل کی جاسکتی ہے جیسے کہ وہ ایک ہی کلاس میں اعلان کیے گئے ہیں. اسی طرح، جامد فیلڈز درآمد کرکے، ہم کلاس کا نام بتائے بغیر ان تک رسائی حاصل کرسکتے ہیں۔ یہ خصوصیت Java 1.5 میں نمودار ہوئی ہے اور صحیح طریقے سے استعمال ہونے پر کوڈ پڑھنے کی اہلیت کو بہتر بناتی ہے۔ یہ کنسٹرکٹ اکثر JUnit ٹیسٹوں میں پایا جاتا ہے، کیونکہ تقریباً تمام ٹیسٹ ڈویلپرز assert کے طریقوں کے لیے static import کا استعمال کرتے ہیں، مثلاً assertEquals()اور ان کی اوورلوڈ شدہ مختلف حالتیں۔

  11. ابھی کے لیے اتنا ہی ہے۔ ہر جاوا پروگرامر کو مذکورہ سٹیٹک موڈیفائر کے تمام پہلوؤں کو جاننے کی ضرورت ہے۔ اس مضمون نے جامد متغیرات، فیلڈز، طریقوں، ابتدائی بلاکس، اور درآمدات کے بارے میں بنیادی معلومات کا جائزہ لیا۔ اس نے کچھ اہم خصوصیات کو بھی چھوا جو جاوا پروگراموں کو لکھنے اور سمجھنے کے لیے جاننا ضروری ہیں۔ مجھے امید ہے کہ ہر ڈویلپر جامد اراکین کے اپنے ہنر مندانہ استعمال کو مکمل کرے گا، کیونکہ یہ سنجیدہ سافٹ ویئر ڈویلپمنٹ کے لیے بہت ضروری ہے۔"

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