জাভাতে কাজ করার সময় আমরা প্রায়শই প্রচুর ক্লাস ব্যবহার করি। এই জাভা ক্লাসগুলি একবারে মেমোরিতে একবারে লোড হয় না, পরিবর্তে, যখন কোনও অ্যাপ্লিকেশন দ্বারা প্রয়োজনীয় হয় সেগুলি লোড করা হয়। এই জায়গাতেই জাভা ক্লাসলয়েডারগুলি ছবিতে আসে। সুতরাং এই নিবন্ধে, আমি উদাহরণ সহ জাভাতে ClassLoader কীভাবে ব্যবহার করব তা নিয়ে আলোচনা করব।
নিম্নলিখিত নিবন্ধগুলি এই নিবন্ধে আবৃত হবে:
আমাদের শুরু করা যাক!
চতুর এবং ডিওপসের মধ্যে পার্থক্য
জাভাতে ClassLoader কী?
জাভাতে ClassLoader জাভা রানটাইম এনভায়রনমেন্ট দ্বারা ডেকে আনা হয়েছে যখনই অ্যাপ্লিকেশনটির দ্বারা প্রয়োজনীয় যখনই ক্লাসগুলি লোড করতে জাভা ভার্চুয়াল মেশিন । ক্লাসলয়েডাররা যেহেতু জাভা রানটাইম এনভায়রনমেন্টের একটি অঙ্গ, তাই জাভা ভার্চুয়াল মেশিনের অন্তর্নিহিত ফাইল এবং ফাইল সিস্টেম সম্পর্কে কোনও ধারণা থাকবে না।
এখন, আসুন জাভাতে অন্তর্নির্মিত ক্লাসলয়েডারগুলির বিভিন্ন ধরণের বুঝতে পারি।
জাভাতে ClassLoader প্রকার
জাভাতে বিভিন্ন ধরণের ক্লাসলয়েডারগুলি নিম্নরূপ:
আসুন আমরা তাদের প্রত্যেকে একে একে আলোচনা করব।
এক্সটেনশন ক্লাসলুডার
নাম অনুসারে এক্সটেনশন ক্লাসলোডার মূল জাভা ক্লাসগুলির এক্সটেনশানগুলি লোড করে জেডিকে এক্সটেনশন লাইব্রেরি। এটি বুটস্ট্র্যাপ ক্লাসলুডারের শিশু এবং জেআর / লিবিব / পাঠ্য ডিরেক্টরি বা জাভা.ইেক্সট.ডিয়ার্স সিস্টেমের সম্পত্তিতে উল্লিখিত অন্য কোনও ডিরেক্টরি থেকে এক্সটেনশনগুলি লোড করে।
অ্যাপ্লিকেশন বা সিস্টেম ClassLoader
অ্যাপ্লিকেশন বা সিস্টেম ক্লাসলোডার এক্সটেনশন ক্লাসলোডার একটি শিশু। এই ধরণের ClassLoader -cp কমান্ড-লাইন বিকল্পে বা CLASSPATH এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে পাওয়া সমস্ত অ্যাপ্লিকেশন স্তরের ক্লাস লোড করে।
বুটস্ট্র্যাপ ক্লাসলুডার
যেমনটি আমরা সকলেই জানি know জাভা ক্লাস একটি উদাহরণ দ্বারা লোড করা হয় java.lang.ClassLoade। তবে, যেহেতু ক্লাসলয়েডারগুলি ক্লাস, তাই বুটস্ট্র্যাপ ক্লাসলোডার জেডিকে অভ্যন্তরীণ ক্লাসগুলি লোড করার জন্য দায়বদ্ধ। বুটস্প্র্যাপ ক্লাসলোডার একটি মেশিন কোড যা জেভিএম যখন কল করে এবং আরটি.জার থেকে ক্লাসগুলি লোড করে তখন অপারেশন শুরু করে। সুতরাং, আপনি বুঝতে পারেন যে বুটস্ট্র্যাপ ক্লাসলুডার এর কোন পিতামাতার ক্লাসলোডার নেই এবং এটি প্রিমর্ডিয়াল ক্লাসলোডার হিসাবে পরিচিত।
বিঃদ্রঃ: বুটস্ট্র্যাপের অগ্রাধিকার এক্সটেনশনের চেয়ে বেশি এবং এক্সটেনশন ক্লাসলোডারকে দেওয়া অগ্রাধিকারটি অ্যাপ্লিকেশন ক্লাসলুডারের চেয়ে বেশি। নীচের চিত্রটি দেখুন:
এই নিবন্ধের পরবর্তী, আসুন আমরা সেই নীতিগুলি বুঝতে পারি যে ক্লাসলডার কাজ করে।
জাভাতে ClassLoader এর নীতিমালা
জাভা ClassLoader যে ভিত্তিতে কাজ করে তার উপর ভিত্তি করে নিয়মের সেটটি নীচের তিনটি নীতি:
আসুন আমরা তাদের প্রতিটি বুঝতে পারি।
স্বতন্ত্রতা সম্পত্তি
এই সম্পত্তিটি নিশ্চিত করে যে ক্লাসগুলির পুনরাবৃত্তি নেই এবং সমস্ত শ্রেণি অনন্য। স্বতন্ত্রতা বৈশিষ্ট্যটিও নিশ্চিত করে যে ক্লাসগুলি পিতা-মাতা ClassLoader দ্বারা লোড করা হয় তা শিশু ClassLoader দ্বারা লোড করা হয় না। একটি দৃশ্যে, যেখানে অভিভাবক ClassLoader ক্লাসটি খুঁজে পেতে পারে না, তারপরে বর্তমান দৃষ্টান্তটি নিজে থেকে এটি করার চেষ্টা করবে।
ডেলিগেশন মডেল
জাভাতে ClassLoader ডেলিগেশন মডেল দ্বারা প্রদত্ত ক্রিয়াকলাপগুলির উপর ভিত্তি করে কাজ করে। সুতরাং, যখনই কোনও ক্লাস বা সংস্থান সন্ধানের জন্য একটি অনুরোধ উত্পন্ন করা হচ্ছে, তখন কোনও ক্লাসলডার উদাহরণ ক্লাসের অনুসন্ধান বা উত্সটি প্যারেন্ট ক্লাসলডারকে অর্পণ করবে।
ClassLoader যে ভিত্তিতে কাজ করে তার ভিত্তিতে ক্রিয়াকলাপগুলির সেটটি নীচে রয়েছে:
- জাভা ভার্চুয়াল মেশিনটি যখনই কোনও ক্লাস জুড়ে আসে তখন ক্লাসটি লোড হয়েছে কিনা তা যাচাই করে।
- ক্ষেত্রে যেখানে ক্লাস বোঝা হয় জেভিএম ক্লাসের কার্যকরকরণের সাথে এগিয়ে যায়, তবে এমন পরিস্থিতিতে যেখানে ক্লাস লোড হয় নাজেভিএম জাভা ক্লাসলোডার সাব-সিস্টেমটিকে নির্দিষ্ট শ্রেণিটি লোড করতে বলে। এর পরে, ClassLoader উপ-সিস্টেম অ্যাপ্লিকেশন ClassLoader কে নিয়ন্ত্রণ দেয়।
- অ্যাপ্লিকেশন ক্লাসলুডার তারপরে অনুরোধটি এক্সটেনশন ক্লাসলোডারকে প্রেরণ করে, এরপরে এই অনুরোধটি বুটস্ট্র্যাপ ক্লাসলোডারকে প্রেরণ করে।
- এখন, বুটস্ট্র্যাপ ক্লাসলুডার অনুসন্ধান করেক্লাসটি পাওয়া যায় কি না তা পরীক্ষা করার জন্য বুটস্ট্র্যাপ শ্রেণিপথ। যদি ক্লাসটি উপলভ্য থাকে তবে তা লোড হয়, অন্যথায় অনুরোধটি আবার এক্সটেনশন ক্লাসলোডারকে দেওয়া হয়।
- এক্সটেনশন ক্লাসলুডার এক্সটেনশন ক্লাসপথে ক্লাসের জন্য পরীক্ষা করে।যদি ক্লাসটি উপলভ্য থাকে তবে তা লোড করা হবে, অন্যথায় অনুরোধটি আবার অ্যাপ্লিকেশন ক্লাসলোডারকে দেওয়া হবে।
- পরিশেষে, অ্যাপ্লিকেশন ক্লাসলুডার অ্যাপ্লিকেশন ক্লাসপথে ক্লাসের জন্য অনুসন্ধান করে।যদি ক্লাস উপলভ্য থাকে তবে লোড করা হয়, অন্যথায় আপনি ClassNotFoundException এর ব্যতিক্রম দেখতে পাবেন।
নীচের চিত্রটি দেখুন।
দৃশ্যমানতা নীতি
এই নীতি অনুসারে, বাচ্চাদের ক্লাসগুলি তার পিতামাতা ক্লাসলোডারদের দ্বারা লোড হওয়া ক্লাসগুলিতে দৃশ্যমান তবে বিপরীতটি সত্য নয়। সুতরাং, অ্যাপ্লিকেশন ClassLoader দ্বারা লোড করা ক্লাসগুলির এক্সটেনশন এবং বুটস্ট্র্যাপ ClassLoader দ্বারা লোড হওয়া ক্লাসগুলির মধ্যে দৃশ্যমানতা রয়েছে।
উদাহরণস্বরূপ, যদি আমাদের দুটি ক্লাস থাকে: একটি ও বি, ধরে নিও যে ক্লাস এ অ্যাপ্লিকেশন ক্লাসলোডার দ্বারা লোড করা হয়েছে এবং ক্লাস বি এক্সটেনশন ক্লাসলোডার দ্বারা লোড হয়েছে। এখানে, ক্লাস A এবং B অ্যাপ্লিকেশন ক্লাসলোডার দ্বারা লোড হওয়া সমস্ত শ্রেণীর কাছে দৃশ্যমান, তবে শ্রেণি বি কেবল এক্সটেনশন ক্লাসলোডার দ্বারা লোড হওয়া শ্রেণীর কাছে দৃশ্যমান।
এছাড়াও, আপনি যদি বুটস্ট্র্যাপ ক্লাসলোডার ব্যবহার করে এই ক্লাসগুলি লোড করার চেষ্টা করেন তবে আপনি এটি দেখতে পাবেন java.lang.ClassNotFoundException । ব্যতিক্রম
অজগর একটি নির্মাতা কি
ঠিক আছে, এখন আপনি ক্লাসলয়েডারগুলির প্রকারগুলি এবং এর পিছনের নীতিগুলি জানেন তবে আসুন কয়েকটি গুরুত্বপূর্ণ পদ্ধতির দিকে নজর দেওয়া যাকথেকে java.lang.ClassLoader ক্লাস
জাভাতে ClassLoader এর পদ্ধতি
অগত্যা কিছু ClassLoader এর নিম্নরূপ:
- লোডক্লাস (স্ট্রিং নাম, বুলিয়ান সমাধান)
- DefineClass ()
- FindClass (স্ট্রিং নাম)
- Class.forName (স্ট্রিং নাম, বুলিয়ান ইনিশিয়ালাইজ, ClassLoader লোডার)
- getParent ()
- getResource ()
লোডক্লাস (স্ট্রিং নাম, বুলিয়ান সমাধান)
এই পদ্ধতিটি ClassLoader এন্ট্রি পয়েন্ট এবং JVM দ্বারা রেফারেন্স করা ক্লাস লোড করতে ব্যবহৃত হয়। এটি নাম নেয় প্যারামিটার হিসাবে বুলিয়ান মানটি সত্যে সেট করে শ্রেণি রেফারেন্সগুলি সমাধান করার জন্য জেভিএম লোডক্লাস () পদ্ধতিটি আহ্বান করে। ক্লাসের উপস্থিতি আছে কি না তা কেবলমাত্র আমাদের নির্ধারণের প্রয়োজন হলে, বুলিয়ান প্যারামিটারটি মিথ্যাতে সেট করা আছে।
ঘোষণা:
সার্বজনীন শ্রেণীর লোডক্লাস (স্ট্রিং নাম, বুলিয়ান সমাধান) ক্লাসনটফাউন্ডএক্সপেশন th
DefineClass ()
ক্লাসের উদাহরণ হিসাবে বাইটের অ্যারে সংজ্ঞা দেওয়ার জন্য ব্যবহৃত একটি চূড়ান্ত পদ্ধতি। যদি ক্লাসটি তখন অবৈধ হয় তবে এটি একটি ক্লাসফর্মেটেরর ফেলে দেয়।
ঘোষণা:
সুরক্ষিত চূড়ান্ত শ্রেণীর ডিফাইন ক্লাস (স্ট্রিং নাম, বাইট [] বি, ইনট অফ, ইন্ট লেন) ক্লাস ফরম্যাটএরর
FindClass (স্ট্রিং নাম)
ফাইন্ড ক্লাস পদ্ধতিটি নির্দিষ্ট শ্রেণীর সন্ধান করতে ব্যবহৃত হয়। সুতরাং, এটি কেবলমাত্র প্যারামিটার হিসাবে পুরোপুরি যোগ্য নামের সাথে ক্লাসটি আবিষ্কার করে কিন্তু ক্লাসটি লোড করে না। লোডক্লাস () পদ্ধতিটি এই পদ্ধতিটি আহ্বান করে যদি পিতামাতা ক্লাসলোডার অনুরোধ করা শ্রেণিটি খুঁজে না পায়। এছাড়াও, ClassLoader এর কোনও পিতামাতারা ক্লাসটি না পেলে ডিফল্ট বাস্তবায়ন এ শ্রেণী পাওয়া ব্যতিক্রম.
ঘোষণা:
সুরক্ষিত ক্লাস ফাইন্ড ক্লাস (স্ট্রিং নাম) ক্লাসনটফাউন্ডএক্সসেপশন ছুড়ে দেয়
Class.forName (স্ট্রিং নাম, বুলিয়ান ইনিশিয়ালাইজ, ClassLoader লোডার)
এই পদ্ধতিটি ক্লাস লোড এবং আরম্ভ করার জন্য ব্যবহৃত হয়। এটি ক্লাসলয়েডারগুলির মধ্যে যে কোনওটিকে বেছে নেওয়ার এবং ক্লাসলুডার প্যারামিটারটি ন্যূনাল করে দেওয়ার জন্য একটি বিকল্প দেয়, তারপরে স্বয়ংক্রিয়ভাবে বুটস্ট্র্যাপের ক্লাসলোডার ব্যবহার করা হয়।
ঘোষণা:
নাম সরকারী স্ট্যাটিক ক্লাস (স্ট্রিং নাম, বুলিয়ান আরম্ভ, ClassLoader লোডার) ক্লাসনটফাউন্ডএক্সেপশন
getParent ()
গেটপ্যারেন্ট পদ্ধতিটি প্রতিনিধি দলের জন্য প্যারেন্ট ক্লাসলোডারকে ফেরত দিতে ব্যবহৃত হয়।
ঘোষণা:
সর্বজনীন চূড়ান্ত ClassLoader getParent ()
getResource ()
নামটি থেকে বোঝা যায়, getResource () পদ্ধতি প্রদত্ত নামের সাথে একটি উত্স অনুসন্ধান করার চেষ্টা করেছিল। এটি প্রথমে উত্সটির জন্য প্যারেন্ট ক্লাসলোডারকে অনুরোধটি অর্পণ করবে। যদি অভিভাবক শূন্য থাকে তবে জেভিএম-এ নির্মিত ক্লাসলোডারের পথটি অনুসন্ধান করা হবে। এখন, যদি এটি ব্যর্থ হয়, তবে পদ্ধতিটি রিসোর্সটি সন্ধানের জন্য ফাইন্ড রিসোর্স (স্ট্রিং) কে অনুরোধ করবে, যেখানে সংস্থানটির নামটি একটি ইনপুট হিসাবে নির্দিষ্ট করা হবে যা পরম বা আপেক্ষিক শ্রেণিপথ হতে পারে। তারপরে, এটি সংস্থানটি পড়ার জন্য একটি ইউআরএল অবজেক্ট ফেরত দেয় বা যদি উত্সটিতে উত্স ফেরতের উপযুক্ত সুযোগ না থাকে বা সন্ধান না পায় তবে একটি শূন্য মান দেয়।
ঘোষণা:
সর্বজনীন ইউআরএল getResource (স্ট্রিং নাম)
এর পরে, জাভাতে ClassLoader এই নিবন্ধে, কাস্টম ClassLoader বুঝতে পারি understand
জাভাতে কাস্টম ক্লাসলোডার
বিল্ট-ইন ক্লাসলয়েডারগুলি বেশিরভাগ ক্ষেত্রেই ফাইলগুলির ফাইল ফাইল সিস্টেমে দেখাশোনা করবে তবে আপনি যদি স্থানীয় হার্ড ড্রাইভের বাইরে ক্লাসগুলি লোড করতে চান তবে আপনাকে কাস্টম ক্লাসলয়েডারগুলি ব্যবহার করতে হবে।
কাস্টম ক্লাসলোডার তৈরি করুন
একটি কাস্টম ClassLoader তৈরি করতে, আপনি প্রসারিত করতে হবে ClassLoader ক্লাস এবং ওভাররাইড FindClass () পদ্ধতি:
উদাহরণ: আসুন আমরা একটি কাস্টম ClassLoader তৈরি করি যা ডিফল্ট ClassLoader প্রসারিত করে এবং নির্দিষ্ট ফাইল থেকে একটি বাইট অ্যারে লোড করে। নীচের কোড দেখুন।
প্যাকেজ এডুরিকা আমদানি java.io.ByteArrayOutputStream আমদানি java.io.File আমদানি java.io.IOException আমদানি java.io.InputStream পাবলিক ক্লাস নমুনা ClassLoader প্রসারিত {@ ওভাররাইড পাবলিক ক্লাস ফাইন্ড ক্লাস (স্ট্রিং নমুনা) ক্লাস নটফাউন্ডএকসেপশন-ক্রোটিজ ফর্মোথেল - ক্রোম (নমুনা) retineClass (নমুনা, খ, 0, বি। দৈর্ঘ্য)} প্রাইভেট বাইট [] কাস্টমলাউডক্লাসফ্রোমফাইল (স্ট্রিং ডেমোফিলনাম) {ইনপুটস্ট্রিম ইনস্ট্রিম = getClass ()। getClassLoader ()। getResourceAsStream ('ফাইল' ('। বিভাজকচার) + '.ক্লাস') বাইট [] বাফার বাইটআরআউটপুটস্ট্র্রিম বিস্ট্রিম = নতুন বাইটআরআউটপুটস্ট্রিম () এর পরের ভ্যালু = 0 চেষ্টা করুন {যখন ((পরেরভ্যালু = ইনস্ট্রিম.ড্রেড ())! = -1) {বিস্ট্রিম.উইরাইট (নেক্সটভ্যালু)}} ধরা (আইওএক্সেপশন ই) {ই.প্রিন্টস্ট্যাকট্রেস () er বাফার = bStream.toByteArray () রিটার্ন বাফার}}
এটির সাথে, আমরা জাভাতে ClassLoader এ এই নিবন্ধটি শেষ করি। আমি আশা করি আপনি জাভাতে ক্লাসলয়েডারগুলি কী কী তা বুঝতে পেরেছেন, এর পদ্ধতিগুলি, বিভিন্ন ধরণের ক্লাসলয়েডারস ইত্যাদি
যদি আপনি 'জাভাতে ClassLoader' এ এই নিবন্ধটি পেয়ে থাকেন তবে এটি দেখুন বিশ্বজুড়ে ছড়িয়ে থাকা 250,000 এরও বেশি সন্তুষ্ট শিক্ষার্থীর নেটওয়ার্ক সহ একটি বিশ্বস্ত অনলাইন লার্নিং সংস্থা এডুরেকা দ্বারা। আমরা আপনার যাত্রার প্রতিটি পদক্ষেপে আপনাকে সহায়তা করতে এখানে আছি, এই জাভা সাক্ষাত্কারের প্রশ্নগুলি ছাড়াও হয়ে উঠার জন্য, আমরা এমন একটি পাঠ্যক্রম নিয়ে এসেছি যা শিক্ষার্থী এবং পেশাদারদের জন্য ডিজাইন করা হয়েছে জাভা বিকাশকারী।
একটি জাভাস্ক্রিপ্ট পদ্ধতি কি
আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে জাভাতে এই 'ক্লাসলুডার এর মন্তব্য বিভাগে এটি উল্লেখ করুন ' এবং যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।