جاوا میں کام کرتے ہوئے ، ہم اکثر کلاسز کی ایک بڑی تعداد کا استعمال کرتے ہیں۔ جاوا کی یہ کلاسیں میموری میں ایک ہی وقت میں نہیں بھری ہوتی ہیں ، اس کے بجائے ، جب کسی ایپلی کیشن کے ذریعہ ضرورت ہوتی ہے تو وہ بھری ہوتی ہیں۔ یہ وہ جگہ ہے جہاں جاوا کلاس لوڈر تصویر میں آتا ہے۔ تو اس مضمون میں ، میں جاسو میں کلاس لاؤڈر کو استعمال کرنے کے بارے میں مثالوں کے ساتھ گفتگو کروں گا۔
اس مضمون میں درج ذیل موضوعات کا احاطہ کیا جائے گا۔
ہمیں شروع کریں!
جاوا میں ClassLoader کیا ہے؟
جاوا میں کلاس لاؤڈر کو جاوا رن ٹائم ماحولیات نے طلب کیا ہے جب بھی درخواست میں درکار ہو کلاسوں کو متحرک طور پر لوڈ کریں۔ جاوا ورچوئل مشین . چونکہ کلاس لوڈر جاوا رن ٹائم ماحولیات کا ایک حصہ ہیں ، لہذا جاوا ورچوئل مشین کو بنیادی فائلوں اور فائلوں کے نظام کے بارے میں کوئی اندازہ نہیں ہوگا۔
اب ، جاوا میں کلاس لوڈرس میں شامل بلٹ میں مختلف اقسام کو سمجھیں۔
جاوا میں ClassLoader کی اقسام
جاوا میں کلاس لوڈرس کی مختلف اقسام مندرجہ ذیل ہیں۔
آئیے ہم ان میں سے ہر ایک پر ایک ایک کرکے بات کریں۔
ایکسٹینشن کلاس لوڈر
جیسا کہ نام سے پتہ چلتا ہے کہ ایکسٹینشن کلاس لاؤڈر بنیادی جاوا کلاسوں کی توسیع کو بوجھ سے لوڈ کرتا ہے جے ڈی کے توسیع لائبریری یہ بوٹسٹریپ کلاس لاؤڈر کا بچہ ہے اور جے ای آر / لِب / ٹیکسٹ ڈائرکٹری یا جاوا.ext.dirs سسٹم پراپرٹی میں مخصوص کسی دوسری ڈائرکٹری سے ایکسٹینشنز لوڈ کرتا ہے۔
ایپلی کیشن یا سسٹم کلاس لوڈر
ایپلی کیشن یا سسٹم کلاس لوڈر ایکسٹینشن کلاس لوڈر کا بچہ ہے۔ اس قسم کا کلاس لاڈر اطلاق سطح کی تمام کلاسز کو لوڈ کرتا ہے جو cc کمانڈ لائن آپشن یا INC CLASSPATH ماحولیاتی متغیر میں پائے جاتے ہیں۔
بوٹسٹریپ کلاس لوڈر
جیسا کہ ہم سب جانتے ہیں جاوا کلاسز کی مثال سے بھری ہوئی ہیں java.lang.ClassLoade۔ لیکن ، چونکہ کلاس لوڈر کلاس ہیں ، اس لئے بوٹسٹریپ کلاس لاؤڈر جے ڈی کے کی داخلی کلاسیں لوڈ کرنے کا ذمہ دار ہے۔ بوٹسٹریپ کلاس لاؤڈر ایک مشین کوڈ ہے جو کارروائی شروع کرتا ہے جب جے وی ایم اس کو کال کرے اور کلاسوں کو rt.jar سے لوڈ کرے۔ لہذا ، آپ یہ سمجھ سکتے ہیں کہ بوٹسٹریپ کلاس لاؤڈر کے پاس کوئی پیرنٹ کلاس لوڈر نہیں ہے اور اس طرح اسے پرائمارڈیل کلاس لاؤڈر کے نام سے جانا جاتا ہے۔
نوٹ: بوٹسٹریپ کی ترجیح توسیع سے زیادہ ہے ، اور ایکسٹینشن کلاس لوڈر کو دی جانے والی ترجیح ایپلی کیشن کلاس لوڈر سے زیادہ ہے۔ ذیل کی تصویر کا حوالہ دیں:
تکرار کرنے والا فبوناکسی c ++
اس مضمون میں آگے ، آئیے ہم ان اصولوں کو سمجھیں جن پر کلاس لاڈر کام کرتا ہے۔
جاوا میں کلاس لوڈر کے اصول
قوانین کا وہ سیٹ جس کی بنیاد پر جاوا کلاس لاؤڈر کام کرتا ہے مندرجہ ذیل تین اصول ہیں۔
آئیے ہم ان میں سے ہر ایک کو سمجھیں۔
انفرادیت پراپرٹی
یہ خاصیت اس بات کو یقینی بناتی ہے کہ کلاسوں کی کوئی تکرار نہ ہو اور ساری کلاسیں منفرد ہوں۔ انفرادیت کی خاصیت یہ بھی یقینی بناتی ہے کہ والدین کلاس لاؤڈر کے ذریعہ کلاسیں بھری ہوئی ہیں ، بچے کلاس لوڈر کے ذریعہ نہیں بھری ہوئی ہیں۔ ایسی صورتحال میں ، جہاں والدین ClassLoader کلاس نہیں ڈھونڈ سکتا ہے ، تب موجودہ صورتحال خود ہی یہ کرنے کی کوشش کرے گی۔
وفد کا ماڈل
جاوا میں ClassLoader ڈیلیگیشن ماڈل کے ذریعہ دی گئی کارروائیوں کے سیٹ پر مبنی کام کرتا ہے۔ لہذا ، جب بھی کلاس یا وسائل ڈھونڈنے کے لئے کوئی درخواست تیار کی جاتی ہے ، تب کلاس لوڈر مثال کے ذریعہ کلاس یا وسائل کو والدین ClassLoader کے سپرد کرتا ہے۔
آپریشنز کا سیٹ جس کی بنیاد پر کلاس لوڈر کام کرتا ہے درج ذیل ہیں:
- جاوا ورچوئل مشین چیک کرتی ہے کہ جب بھی کلاس آتی ہے تو کلاس بھری ہے یا نہیں۔
- اس معاملے میں جہاں کلاس بھری ہوئی ہے جے وی ایم کلاس پر عمل درآمد کے ساتھ آگے بڑھتا ہے ، لیکن ایسی صورتحال میں جہاں کلاس لوڈ نہیں ہوتی ہےJVM جاوا ClassLoader ذیلی نظام کو اس مخصوص کلاس کو لوڈ کرنے کے لئے کہتا ہے۔ اس کے بعد ، ClassLoader ذیلی نظام ایپلی کیشن ClassLoader کو کنٹرول دیتا ہے۔
- اس کے بعد ایپلی کیشن کلاس لوڈر ایکسٹینشن کلاس لوڈر کو درخواست بھیج دیتا ہے ، جس کے بعد یہ درخواست بوٹسٹریپ کلاس لاڈر کو منتقل کردی جاتی ہے۔
- اب ، بوٹسٹریپ کلاس لوڈر تلاش کرتا ہےیہ جانچنے کے لئے کہ کلاس دستیاب ہے یا نہیں۔ اگر کلاس دستیاب ہے ، تو پھر وہ بھری ہوئی ہے ، بصورت دیگر یہ درخواست ایکسٹینشن کلاس لوڈر کو بھیج دی گئی ہے۔
- ایکسٹینشن کلاس لاڈر ایکسٹینشن کلاس پیٹ میں کلاس کی جانچ پڑتال کرتا ہے۔اگر کلاس دستیاب ہے ، تو پھر وہ بھری ہوئی ہے ، ورنہ درخواست دوبارہ ایپلی کیشن کلاس لوڈر کو دے دی گئی۔
- آخر میں ، ایپلی کیشن کلاس لاڈر درخواست کلاس پیٹ میں کلاس تلاش کرتا ہے۔اگر کلاس دستیاب ہے ، تو بھری ہوئی ہے ، ورنہ آپ کو ClassNotFoundException کی رعایت نظر آئے گی۔
نیچے دی گئی تصویر کا حوالہ دیں۔
نمائش کا اصول
اس اصول کے مطابق ، بچوں کی کلاسیں اس کے والدین کلاس لوڈرس کی بھری ہوئی کلاسوں کے لئے مرئی ہیں ، لیکن اس کے برعکس یہ سچ نہیں ہے۔ لہذا ، ایپلی کیشن کلاس لوڈر کے ذریعہ بھری ہوئی کلاسوں میں توسیع اور بوٹسٹریپ کلاس لاوڈر کے ذریعہ بھری ہوئی کلاسوں میں مرئیت موجود ہے۔
مثال کے طور پر ، اگر ہمارے پاس دو کلاس ہیں: A & B ، فرض کریں کہ کلاس A ایپلی کیشن ClassLoader کے ذریعہ بھری ہوئی ہے اور کلاس B ایکسٹینشنز ClassLoader کے ذریعہ بھری ہوئی ہے۔ یہاں ، کلاس A اور B ان تمام کلاسوں کے لئے مرئی ہیں جن میں ایپلی کیشن کلاس لاؤڈر بھری ہوئی ہے ، لیکن کلاس B صرف ان کلاسوں کے لئے نظر آتی ہے جو ایکسٹینشن کلاس لوڈر کے ذریعہ بھری ہوئی ہیں۔
نیز ، اگر آپ بوٹسٹریپ کلاس لاڈر کا استعمال کرکے ان کلاسوں کو لوڈ کرنے کی کوشش کرتے ہیں تو ، آپ کو یہ نظر آئے گا java.lang.ClassNotFoundException . رعایت.
ٹھیک ہے ، اب جب کہ آپ کلاس لوڈرس کی اقسام اور اس کے پیچھے کے اصولوں کو جانتے ہیں ، آئیے کچھ اہم طریقوں پر غور کریںسے java.lang.ClassLoader کلاس
جاوا میں ClassLoader کے طریقے
کچھ ضروری ClassLoader کے مندرجہ ذیل ہیں:
- لوڈ کلاس (سٹرنگ کا نام ، بولین حل)
- DefineClass ()
- FindClass (اسٹرنگ کا نام)
- Class.forName (اسٹرنگ کا نام ، بولین ابتدائیہ ، ClassLoader لوڈر)
- getParent ()
- getResource ()
لوڈ کلاس (سٹرنگ کا نام ، بولین حل)
یہ طریقہ ClassLoader کا داخلہ نقطہ ہے اور JVM کے ذریعہ حوالہ کردہ کلاس کو لوڈ کرنے کے لئے استعمال ہوتا ہے۔ اس کا نام لیتا ہے ایک پیرامیٹر کے طور پر جے وی ایم نے بولین ویلیو کو صحیح پر سیٹ کرکے کلاس حوالوں کو حل کرنے کے لئے لوڈ کلاس () طریقہ کی درخواست کی ہے۔ صرف اس صورت میں جب ہمیں یہ تعین کرنے کی ضرورت ہو کہ کلاس موجود ہے یا نہیں ، بولین پیرامیٹر کو غلط پر سیٹ کیا گیا ہے۔
اعشاریہ کو بائنری ازگر میں تبدیل کریں
اعلامیہ:
پبلک کلاس لوڈ کلاس (سٹرنگ کا نام ، بولین ریزولوشن) نے ClassNotFoundException rows کو پھینک دیا {
DefineClass ()
ایک حتمی طریقہ جو بائٹس کی صف کو کلاس کی مثال کے طور پر متعین کرنے کے لئے استعمال ہوتا ہے۔ اگر اس وقت کلاس غیر موزوں ہے تو ، یہ کلاس فارمیٹ ایرر پھینک دیتا ہے۔
اعلامیہ:
محفوظ حتمی کلاس DefineClass (اسٹرنگ کا نام ، بائٹ [] b ، INT آف ، INT لین) کلاس فارمیٹ ایرر پھینک دیتا ہے
FindClass (اسٹرنگ کا نام)
فائنڈ کلاس کا طریقہ مخصوص طبقے کو تلاش کرنے کے لئے استعمال ہوتا ہے۔ لہذا ، اس کو پیرامیٹر کے بطور مکمل طور پر اہل نام کے ساتھ کلاس مل گئی ہے لیکن کلاس لوڈ نہیں ہوتی ہے۔ لوڈ کلاس () طریقہ اس طریقہ کار کا مطالبہ کرتا ہے اگر والدین ClassLoader مطلوبہ کلاس نہیں ڈھونڈ سکتا ہے۔ نیز ، اگر کلاس لوڈر کے والدین کو کلاس نہیں ملتی ہے تو پہلے سے طے شدہ نفاذ ایک میں پھینک دیتا ہے ClassNotFoundException.
اعلامیہ:
محفوظ کلاس فائنڈکلاس (اسٹرنگ کا نام) کلاسنوٹ فاؤنڈ ایسیسپیکشن کو پھینک دیتا ہے
Class.forName (اسٹرنگ کا نام ، بولین ابتدائیہ ، ClassLoader لوڈر)
یہ طریقہ کلاس کو لوڈ کرنے اور شروع کرنے کے لئے استعمال ہوتا ہے۔ یہ کلاس لوڈروں میں سے کسی کو منتخب کرنے اور کلاس لوڈر پیرامیٹر کو نیل کرنے کے لئے آپشن فراہم کرتا ہے ، پھر خود بخود بوٹسٹریپ کلاس لاڈر استعمال ہوتا ہے.
اعلامیہ:
عوامی جامد کلاس برائے نام (سٹرنگ کا نام ، بولین ابتدائیہ ، ClassLoader لوڈر) کلاس NotFoundException پھینک دیتا ہے
getParent ()
گیٹ پیرنٹ کا طریقہ کار وفد کے ل the پیرنٹ کلاس لوڈر کو واپس کرنے کے لئے استعمال کیا جاتا ہے۔
اعلامیہ:
پبلک فائنل کلاس لوڈر گیٹ پیرنٹ ()
getResource ()
جیسا کہ نام سے پتہ چلتا ہے ، getResource () کے طریقہ کار نے دیئے ہوئے نام کے ساتھ کوئی وسیلہ تلاش کرنے کی کوشش کی۔ ابتدائی طور پر یہ وسائل کے لئے والدین کے ClassLoader کو درخواست دے گی۔ اگر والدین کالعدم ہیں تو ، پھر JVM میں بنایا گیا ClassLoader کا راستہ تلاش کیا جائے گا۔ اب ، اگر یہ ناکام ہوجاتا ہے تو ، اس کے بعد یہ طریقہ وسائل تلاش کرنے کے ل find فائنڈر ریسورس (اسٹرنگ) کی درخواست کرے گا ، جہاں وسائل کا نام ایک ان پٹ کے طور پر متعین کیا گیا ہے جو مطلق یا رشتہ دار طبقے کا راستہ ہوسکتا ہے۔ پھر ، اس وسیلہ کو پڑھنے کے لئے یو آر ایل آبجیکٹ واپس کرتا ہے یا اگر قدرتی وسائل کو وسائل کو واپس کرنے کے لئے مناسب مراعات نہیں ملتا ہے یا نہیں ملتا ہے تو کوئی قدر کی قیمت دیتا ہے۔
اعلامیہ:
عوامی یو آر ایل getResource (اسٹرنگ کا نام)
اگلا ، جاوا میں ClassLoader کے اس مضمون میں ، آئیے ہم اپنی مرضی کے ClassLoader کو سمجھیں۔
جاوا میں کسٹم کلاس لوڈر
بلٹ میں کلاس لوڈرز زیادہ تر معاملات کی دیکھ بھال کریں گے جہاں فائلیں فائل سسٹم میں پہلے سے موجود ہیں ، لیکن اگر آپ کلاس کو لوکل ہارڈ ڈرائیو سے لوڈ کرنا چاہتے ہیں تو آپ کو اپنی مرضی کے مطابق کلاس لوڈرز استعمال کرنے کی ضرورت ہے۔
اپنی مرضی کے مطابق ClassLoader بنائیں
حسب ضرورت ClassLoader بنانے کے ل you ، آپ کو اس میں توسیع کی ضرورت ہے کلاس لوڈر کلاس اور اس کی جگہ لے لے FindClass () طریقہ:
مثال: آئیے ہم ایک اپنی مرضی کے مطابق ClassLoader بنائیں جو پہلے سے طے شدہ ClassLoader میں توسیع کرتا ہے اور مخصوص فائل سے بائٹ سرنی لوڈ کرتا ہے۔ ذیل میں کوڈ ملاحظہ کریں۔
پیکیج ایوریکا درآمد java.io.ByteArrayOutputStream درآمد java.io.File درآمد java.io.IOException درآمد java.io.InputStream عوامی کلاس نمونہ ClassLoader میں توسیع کرتا ہے۔ (نمونہ) واپسی DefineClass (نمونہ ، بی ، 0 ، b.length)} نجی بائٹ [] اپنی مرضی کے مطابق لوڈکلاس فریم فائل (سٹرنگ ڈیمو فیلی نام) {ان پٹ اسٹریم inStream = getClass (). getClassLoader () getResourceAsStream ('file.' '. splittorChar) + '.class') بائٹ [] بفر بائٹآری آؤٹ پٹ اسٹریم bStream = نیا بائٹآری آؤٹ پٹ اسٹریم () int NextValue = 0 کوشش کریں {جبکہ ((NextValue = inStream.read ())! = -1) {bStream.write (NextValue)}} کیچ (IOException e) {e.printStackTrace () er بفر = bStream.toByteArray () ریٹرن بفر}
اس کے ساتھ ، ہم جاوا میں ClassLoader پر اس مضمون کو ختم کرتے ہیں۔ مجھے امید ہے کہ آپ سمجھ گئے ہوں گے کہ جاوا میں کلاس لاؤڈر کیا ہیں ، اس کے طریقے ، کلاس لوڈرز کی مختلف اقسام وغیرہ۔
اگر آپ کو یہ مضمون 'جاوا میں ClassLoader' پر ملا ہے تو ، چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کا نیٹ ورک موجود ہے۔ ہم آپ کے سفر کے ہر قدم میں آپ کی مدد کرنے کے لئے حاضر ہیں ، اس جاوا انٹرویو سوالات کے علاوہ بننے کے ل a ، ہم ایک نصاب تیار کرتے ہیں جو طلباء اور پیشہ ور افراد کے لئے تیار کیا گیا ہے جاوا ڈویلپر۔
ہمارے لئے ایک سوال ہے؟ برائے کرم جاوا میں اس 'کلاس لوڈر' کے تبصرے سیکشن میں اس کا ذکر کریں ' اور ہم جلد از جلد آپ کے پاس واپس آجائیں گے۔