जब हम नए ऑपरेटर का उपयोग एक वर्ग का एक instace बनाने के लिए, यह दो बातें
- लोड वर्ग स्मृति करने के लिए, अगर यह लोड नहीं है करता है - जो वर्ग के नि: स्मृति प्रतिनिधित्व बनाने का मतलब .class फ़ाइल से ताकि एक उदाहरण इसे से बनाया जा सके। इसमें स्थैतिक चर प्रारंभ करना (उस वर्ग का समाधान)
- उस वर्ग का एक उदाहरण बनाएं और चर के संदर्भ को संग्रहीत करें।
Class.forName
केवल पहली चीज करता है। यह कक्षा को स्मृति में लोड करता है और कक्षा के उदाहरण के रूप में उस संदर्भ को वापस करता है। अगर हम एक उदाहरण बनाना चाहते हैं, तो हम उस वर्ग की नई इंस्टेंस विधि को कॉल कर सकते हैं। जो डिफ़ॉल्ट कन्स्ट्रक्टर (कोई तर्क कन्स्ट्रक्टर) का आह्वान करेगा। ध्यान दें कि यदि डिफ़ॉल्ट कन्स्ट्रक्टर पहुंच योग्य नहीं है, तो नया इंस्टेंस विधि IllegalAccessException
फेंक देगा। और यदि कक्षा एक अमूर्त वर्ग या इंटरफ़ेस है या इसमें डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है, तो यह InstantiationException
फेंक देगा। यदि उस वर्ग के समाधान के दौरान कोई अपवाद उत्पन्न होता है, तो यह ExceptionInInitializerError
फेंक देगा।
यदि डिफ़ॉल्ट कन्स्ट्रक्टर परिभाषित नहीं किया गया है, तो हमें प्रतिबिंब API का उपयोग करके डिफेंडर कन्स्ट्रक्टर का आह्वान करना होगा।
लेकिन Class.forName के साथ मुख्य लाभ यह है कि यह वर्ग नाम को स्ट्रिंग तर्क के रूप में स्वीकार कर सकता है। तो हम गतिशील रूप से कक्षा का नाम पारित कर सकते हैं। लेकिन अगर हम नए ऑपरेटर का उपयोग करके कक्षा का उदाहरण बनाते हैं, तो कक्षा का नाम गतिशील रूप से बदला नहीं जा सकता है।
Class.forName()
घुमाव कॉलर क्लासलोडर के लोड क्लास विधि को कॉल करेगा (कक्षा के क्लासलोडर जहां से Class.forName
लागू किया गया है)।
डिफ़ॉल्ट रूप से, Class.forName()
उस कक्षा को हल करता है। जिसका अर्थ है, उस वर्ग के अंदर सभी स्थैतिक चर शुरू करें। ही Class.forName(String name,boolean initialize,ClassLoader loader)
का उपयोग कर Class.forName()
है लोड हो रहा है JDBC ड्राइवर के लिए मुख्य कारण के अतिभारित पद्धति का उपयोग करके बदला जा सकता है, ड्राइवर गतिशील रूप से परिवर्तित कर सकते हैं। स्थिर ब्लॉक में सभी ड्राइवर्स स्वयं का एक उदाहरण बनाएंगे और DriverManager.registerDriver()
विधि का उपयोग कर DriverManager के साथ उस श्रेणी को पंजीकृत करेंगे। डिफ़ॉल्ट रूप से Class.forName(String className)
कक्षा को हल करने के बाद से, यह स्थिर प्रारंभकर्ता प्रारंभ करेगा। तो जब हम Class.forName("com.sun.jdbc.odbc.JdbcOdbcDriver")
फोन, ड्राइवर वर्ग लोड किया जाएगा, instanciated और
DriverManager
साथ पंजीकृत तो अगर आप नए ऑपरेटर आप है प्रयोग कर रहे हैं निम्नलिखित बातें करने के लिए।
कोड:
Driver drv = new com.sun.jdbc.odbc.JdbcOdbcDriver();
DriverManager.registerDriver(drv);
स्रोत
2016-09-29 10:55:00
इसके अलावा http://stackoverflow.com/a/8053125/632951 – Pacerier