উভয়ই ClassNotFoundException এবং NoClassDefFoundError যখন JVM বা ClassLoader রান-টাইমে লোড করার সময় উপযুক্ত ক্লাস খুঁজে পায় না তখন ত্রুটিগুলি। ClassNotFoundException একটি চেক করা ব্যতিক্রম এবং NoClassDefFoundError একটি ত্রুটি যা আনচেক করা হয়।
বিভিন্ন ধরনের ClassLoader আছে পার্থক্য উত্স থেকে ক্লাস লোড করে, কখনও কখনও এটি লাইব্রেরি JAR ফাইলগুলি অনুপস্থিত বা ভুল ক্লাস-পাথের কারণ হতে পারে যার কারণে লোডার রান-টাইমে ক্লাস লোড করতে সক্ষম হয় না৷
ClassNotFoundException
ClassNotFoundException যখন আমরা প্রতিফলন ব্যবহার করে রান-টাইমে একটি ক্লাস লোড করার চেষ্টা করি এবং সেই ক্লাস ফাইলগুলি অনুপস্থিত থাকলে ClassNotFoundException দিয়ে অ্যাপ্লিকেশন বা প্রোগ্রাম নিক্ষেপ করা হয়। ব্যতিক্রম। কম্পাইল-টাইমে চেক করার কিছু নেই যেহেতু এটি রান-টাইমে ক্লাস লোড করছে।
উদাহরণ
public class ClassNotFoundExceptionTest { public static void main(String[] args) { try { Class.forName("Test"); } catch (ClassNotFoundException cnfe) { System.err.println("You are trying to search for a class is not existing. "+cnfe); } } }
আউটপুট
You are trying to search for a class is not existing. java.lang.ClassNotFoundException: Test
NoClassDefFoundError
NoClassDefFoundError একটি ক্লাস যখন ক্লাসপথ থেকে একটি নির্দিষ্ট ক্লাসের সাথে কম্পাইল করা হয় তবে রান-টাইমে একই ক্লাস উপলব্ধ না হলে থ্রো করা হয়। অনুপস্থিত JAR ফাইলগুলি NoClassDefFoundError পাওয়ার সবচেয়ে মৌলিক কারণ . জাভা এপিআই ডক্স অনুসারে "অনুসন্ধান করা ক্লাসের সংজ্ঞাটি বিদ্যমান ছিল যখন বর্তমানে এক্সিকিউটিং ক্লাস কম্পাইল করা হয়েছিল, কিন্তু সংজ্ঞাটি আর খুঁজে পাওয়া যাবে না।"
উদাহরণ
class Test1 { public void show() { System.out.println("show() method called"); } } public class Test2 { public static void main(String[] args) { Test1 t = new Test1(); t.show(); } }
যখন আমরা উভয় ক্লাস কম্পাইল করব তখন আমরা দুটি ক্লাস ফাইল পাব Test1.class এবং Test2.class, Test2 চালানোর সময় ক্লাস শুধু Test1.class সরান ফাইল করলে আমরা NoClassDefFoundError পাব নিচের মত
আউটপুট
Exception in thread "main" java.lang.NoClassDefFoundError: Test1 at Test2.main(Test2.java:9)