संकलन के बाद, एक interface.but करने के लिए एक ठोस वर्ग से टेस्ट कक्षा बदलने के एक ठोस कक्षा Test.Then को test3 लिंक रहने यदि संकल्प गलत है, JVM इस error.It के बहुत ही दिलचस्प नहीं मिलेगा। असल में, Class someClass1= Class.forName("Test3",false,cls)
टेस्ट 3 को हल नहीं करेगा, इसका मतलब है कि कोई त्रुटि नहीं फेंक दी जाएगी।
12,3 लिंकिंग लिंकिंग कक्षा या इंटरफ़ेस प्रकार की एक बाइनरी रूप ले और जावा आभासी मशीन के क्रम राज्य में यह संयोजन, इतना है कि यह क्रियान्वित किया जा सकता की प्रक्रिया है। एक वर्ग या इंटरफ़ेस प्रकार हमेशा लिंक होने से पहले लोड किया जाता है। लिंक करने में तीन अलग-अलग गतिविधियां शामिल हैं: प्रतीकात्मक संदर्भों का सत्यापन, तैयारी और संकल्प। जावा वर्चुअल मशीन विशिष्टता, द्वितीय संस्करण के अध्याय 5 में लिंकिंग के सटीक अर्थशास्त्र दिए गए हैं। यहां हम जावा प्रोग्रामिंग भाषा के दृष्टिकोण से प्रक्रिया का एक अवलोकन प्रस्तुत करते हैं।
12.3.3 प्रतीकात्मक संदर्भ का संकल्प क्लास अथवा अंतरफलक संदर्भ अन्य वर्गों और इंटरफेस और अपने खेतों, विधियों, और कंस्ट्रक्टर प्रतीकात्मक की बाइनरी प्रतिनिधित्व, अन्य वर्गों और इंटरफेस की बाइनरी नाम (§13.1) का उपयोग (§13.1)। फ़ील्ड और विधियों के लिए, इन प्रतीकात्मक संदर्भों में वर्ग या इंटरफ़ेस प्रकार का नाम शामिल है जो उपयुक्त प्रकार की जानकारी के साथ फ़ील्ड या विधि के साथ-साथ फ़ील्ड या विधि का नाम घोषित करता है। एक प्रतीकात्मक संदर्भ का उपयोग करने से पहले इसे संकल्प से गुजरना चाहिए, जिसमें एक प्रतीकात्मक संदर्भ सही होने के लिए चेक किया गया है और, आमतौर पर, प्रत्यक्ष संदर्भ के साथ प्रतिस्थापित किया जाता है जिसे संदर्भ बार-बार उपयोग किया जाता है, तो अधिक कुशलता से संसाधित किया जा सकता है।
यदि समाधान के दौरान कोई त्रुटि होती है, तो एक त्रुटि फेंक दी जाएगी। आमतौर पर, यह कक्षा असंगत क्लास चेंजएरर के निम्न उपखंडों में से एक का उदाहरण होगा, लेकिन यह असंगत क्लास चेंज एरर के किसी अन्य उप-वर्ग का भी उदाहरण हो सकता है या यहां तक कि क्लास असंपेबल क्लास चेंज एरर का एक उदाहरण भी हो सकता है। , या मंगलाचरण एक प्रतीकात्मक संदर्भ का सामना करना पड़ा गया है कि एक प्रयोग है या एक क्षेत्र का काम करता है: यह त्रुटि, कार्यक्रम प्रकार के लिए एक प्रतीकात्मक संदर्भ का उपयोग करता है में किसी भी बिंदु पर फेंक दिया जा सकता है प्रत्यक्ष या परोक्ष रूप:
IllegalAccessError किसी विधि का, या किसी वर्ग के उदाहरण का निर्माण, जिसमें संदर्भ वाले कोड में पहुंच नहीं है क्योंकि फ़ील्ड या विधि को निजी, संरक्षित, या डिफ़ॉल्ट पहुंच (सार्वजनिक नहीं) घोषित किया गया था, या क्योंकि कक्षा घोषित नहीं की गई थी जनता। यह हो सकता है, उदाहरण के लिए, यदि मूल रूप से घोषित किया गया फ़ील्ड किसी अन्य वर्ग के बाद निजी हो जाता है जो फ़ील्ड को संदर्भित करता है (§13.4.6)।
InstantiationError: एक प्रतीकात्मक संदर्भ कि आ गई एक वर्ग उदाहरण निर्माण अभिव्यक्ति में प्रयोग किया जाता है, लेकिन क्योंकि संदर्भ पता चला है एक इंटरफेस करने के लिए या एक अमूर्त वर्ग का उल्लेख करने के एक उदाहरण नहीं बनाया जा सकता। यह हो सकता है, उदाहरण के लिए, यदि मूल रूप से सार नहीं है, तो एक वर्ग के बाद सारणी को संदर्भित किया गया है जो प्रश्न में वर्ग को संदर्भित किया गया है (§13.4.1)।
NoSuchFieldError: एक प्रतीकात्मक संदर्भ का सामना करना पड़ा गया है कि एक विशिष्ट वर्ग या अंतरफलक के किसी विशिष्ट क्षेत्र के लिए संदर्भित करता है, लेकिन वर्ग या इंटरफ़ेस है कि नाम के एक क्षेत्र शामिल नहीं है। यह हो सकता है, उदाहरण के लिए, यदि किसी वर्ग के बाद किसी वर्ग से फ़ील्ड घोषणा हटा दी गई थी जो फ़ील्ड को संदर्भित करती है (§13.4.7)।
NoSuchMethodError: एक प्रतीकात्मक संदर्भ का सामना किया गया है जो किसी विशिष्ट वर्ग या इंटरफ़ेस की विशिष्ट विधि को संदर्भित करता है, लेकिन कक्षा या इंटरफ़ेस में उस हस्ताक्षर की विधि नहीं है। यह हो सकता है, उदाहरण के लिए, यदि किसी अन्य वर्ग के बाद किसी वर्ग से विधि घोषणा को हटा दिया गया था जो विधि को संदर्भित किया गया था (§13.4.11)। इसके अतिरिक्त, असंतुष्ट LinkError (का उप-वर्ग) LinkageError) यदि कोई वर्ग मूल विधि घोषित करता है जिसके लिए कोई कार्यान्वयन नहीं मिल सकता है तो उसे फेंक दिया जा सकता है। वर्चुअल मशीन (§12.3) द्वारा किस तरह की रिज़ॉल्यूशन रणनीति का उपयोग किया जा रहा है, इस पर निर्भर करता है कि विधि का उपयोग किया जाता है या इससे पहले त्रुटि होगी।