जावा संकलन की व्याख्या: javac कैसे काम करता है, संकलन चरण और सामान्य त्रुटियाँ

जावा संकलन क्या है? | शुरुआती लोगों के लिए “संकलन” को समझना

जावा में, “संकलन” वह प्रक्रिया है जिसमें मानव द्वारा लिखे गए स्रोत कोड (.java) को ऐसे स्वरूप में बदलना शामिल है जिसे जावा वर्चुअल मशीन (JVM) पढ़ सके
इस प्रक्रिया का आउटपुट एक .class फ़ाइल होती है, जिसे बाइटकोड कहा जाता है।

C जैसी भाषाओं के विपरीत, जो सीधे मूल मशीन कोड में संकलित होती हैं, जावा पहले स्रोत कोड को बाइटकोड में बदलता है और फिर इसे JVM पर चलाता है।
इस तंत्र के कारण, वही .class फ़ाइल विभिन्न ऑपरेटिंग सिस्टम पर चल सकती है, जिससे एक ही जावा प्रोग्राम Windows, macOS, और Linux पर चल सकता है

समझने के लिए एक और महत्वपूर्ण बिंदु यह है कि संकलन और निष्पादन अलग-अलग कार्य हैं

  • “javac” → संकलन के लिए जिम्मेदार
  • “java” → निष्पादन के लिए जिम्मेदार

लगभग 90% शुरुआती इस अंतर को स्पष्ट न होने के कारण संघर्ष करते हैं।
यह दृढ़ता से समझना कि ये दो कमांड अलग-अलग भूमिकाएँ निभाते हैं, सबसे प्रभावी पहला कदम है।

जावा संकलन के लिए आवश्यकताएँ

जावा कोड को संकलित करने के लिए, आपके पास JDK (जावा डेवलपमेंट किट) स्थापित होना चाहिए।
केवल JRE पर्याप्त नहीं है, क्योंकि javac कंपाइलर एक डेवलपर टूल है जो केवल JDK में शामिल होता है।

निम्नलिखित की जाँच करके शुरू करें:

javac -version

यदि यह कमांड संस्करण संख्या लौटाता है, तो सब ठीक है।
यदि आपको “command not found” जैसा संदेश मिलता है, तो निम्नलिखित में से एक संभवतः सत्य है:

  • JDK स्थापित नहीं है
  • JDK स्थापित है लेकिन PATH सेट नहीं है
  • केवल JRE स्थापित है (कोई विकास टूल नहीं)

विशेष रूप से, PATH कॉन्फ़िगरेशन शुरुआती लोगों के लिए एक सामान्य बाधा है।
यदि सिस्टम javac (या bin डायरेक्टरी) वाली डायरेक्टरी नहीं ढूँढ पाता है, तो संकलन काम नहीं करेगा।

निष्कर्ष:
आप केवल तब जावा संकलन शुरू कर सकते हैं जब “JDK स्थापना” और “PATH सत्यापन” दोनों सही ढंग से पूर्ण हो चुके हों।

व्यावहारिक रूप से जावा फ़ाइल का संकलन

यहाँ, हम एक सरल नमूना प्रोग्राम बनाएँगे और javac का उपयोग करके इसे संकलित करेंगे।
पहले, निम्नलिखित सामग्री को एक टेक्स्ट एडिटर में सहेजें।

Sample.java

public class Sample {
    public static void main(String[] args) {
        System.out.println("Hello Java!");
    }
}

फ़ाइल का नाम Sample.java होना चाहिए, और यह महत्वपूर्ण है कि सार्वजनिक क्लास का नाम फ़ाइल नाम से मेल खाता हो।
यदि यह नियम तोड़ा जाता है तो जावा संकलित नहीं करेगा, और यह शुरुआती लोगों की एक क्लासिक गलती है।

अगला, अपने टर्मिनल या कमांड प्रॉम्प्ट में निम्नलिखित कमांड चलाएँ:

javac Sample.java

यदि संकलन सफल होता है, तो उसी डायरेक्टरी में एक Sample.class फ़ाइल दिखाई देगी।
यह दर्शाता है कि संकलन सफलतापूर्वक पूरा हो गया है।

इस बिंदु पर, आपके पास अब है:

  • Sample.java (स्रोत कोड)
  • Sample.class (बाइटकोड)

इन दोनों के साथ, आप जावा प्रोग्राम चलाने के लिए तैयार हैं।

संकलन के बाद प्रोग्राम चलाना

संकलन के बाद, अगला कदम .class फ़ाइल को निष्पादित करना है।
यहाँ उपयोग किया गया कमांड java है, javac नहीं।

java Sample

मुख्य बिंदु यह है कि .class एक्सटेंशन शामिल न करें
यदि आप java Sample.class लिखते हैं, तो त्रुटि होगी।
जावा प्रोग्राम को क्लास नाम निर्दिष्ट करके चलाने के लिए डिज़ाइन किया गया है।

सारांश में:

RoleCommandTarget
Compilejavac Sample.java.java file
Runjava SampleClass name (no extension)

एक बार जब आप javac और java की अलग-अलग भूमिकाओं को स्पष्ट रूप से समझ लेते हैं, तो आप प्रभावी रूप से शुरुआती चरण को पार कर चुके होते हैं।

यदि स्क्रीन पर “Hello Java!” दिखाई देता है, तो आपका प्रोग्राम सफलतापूर्वक चला।
इस बिंदु पर, आपने न्यूनतम आवश्यक जावा कार्यप्रवाह को समझ लिया है।

सामान्य त्रुटियाँ और उन्हें कैसे ठीक करें

जावा संकलन के दौरान त्रुटियों का सामना करना शुरुआती लोगों के लिए पूरी तरह सामान्य है।
यहाँ, हम कई उपयोगकर्ताओं द्वारा सामना किए जाने वाले सबसे सामान्य मुद्दों पर ध्यान केंद्रित करेंगे।

1) javac: command not found

लगभग 100% मामलों में, कारण निम्नलिखित में से एक होता है:

  • JDK स्थापित नहीं है
  • PATH सही ढंग से कॉन्फ़िगर नहीं है

समाधान:
javac -version चलाएँ
→ यदि यह काम नहीं करता, तो JDK को पुनः स्थापित करें और अपने PATH सेटिंग्स की समीक्षा करें।

2) संकलन सफल होता है लेकिन कोई .class फ़ाइल उत्पन्न नहीं होती

सबसे आम गलती यह है:

फ़ाइल नाम सार्वजनिक क्लास नाम से मेल नहीं खाता

उदाहरण:

public class Test {
}

→ इससे संकलन त्रुटि होगी।

3) एन्कोडिंग-संबंधी चेतावनियाँ

warning: [options] bootstrap class path not set in conjunction with -source 1.7

ऐसी चेतावनियां आमतौर पर घातक त्रुटियां नहीं होतीं।
हालांकि, वे पुरानी स्रोत विकल्पों या एन्कोडिंग असंगतियों का संकेत दे सकती हैं।
समस्याओं से बचने के लिए, हमेशा अपनी फ़ाइलें UTF-8 में सहेजें

IDE के साथ संकलन

वास्तविक दुनिया के जावा विकास में, डेवलपर्स कम ही javac को कमांड लाइन से मैन्युअल रूप से चलाते हैं।
यह इसलिए है क्योंकि IDE (इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट) स्वचालित रूप से संकलन संभालते हैं

निम्नलिखित IDE विशेष रूप से लोकप्रिय और व्यावहारिक हैं:

IDEFeatures
IntelliJ IDEAThe de facto standard for modern Java development, suitable for professional use.
EclipseA long-established IDE widely used in enterprise projects.
VS CodeLightweight; Java Extension Pack provides a complete environment.

IDE आपके कोड को स्वचालित रूप से संकलित करते हैं जब भी आप फ़ाइल सहेजते हैं और तुरंत त्रुटियों को उजागर करते हैं।
यह कई शुरुआती समस्याओं को समाप्त करता है जैसे कमांड टाइपो और PATH की गलत कॉन्फ़िगरेशन।

फिर भी, कम से कम एक बार javac से मैन्युअल रूप से संकलन करना जावा के आंतरिक कार्य को समझने के लिए मूल्यवान है
एक बार जब आप “संकलन → चलाना” प्रवाह को समझ लेते हैं, तो IDE के साथ आपकी सीखने की गति काफी बढ़ जाएगी।

मूल javac विकल्प

javac कमांड कई विकल्पों का समर्थन करता है जो संकलन के तरीके को नियंत्रित करते हैं।
शुरुआती स्तर पर, आपको केवल कुछ सामान्यतः उपयोग किए जाने वाले विकल्पों को समझने की आवश्यकता है।

यहाँ तीन प्रतिनिधि विकल्प हैं:

OptionDescriptionExample
-dSpecifies the output directory for class filesjavac -d out Sample.java
-classpathSpecifies external libraries or additional class pathsjavac -classpath lib/* Sample.java
--enable-previewEnables preview language featuresjavac --enable-preview Sample.java

-d विकल्प पैकेजों का उपयोग करते समय विशेष रूप से महत्वपूर्ण है।
उदाहरण के लिए, यदि आप package com.example; का उपयोग करते हैं, तो javac -d को छोड़ने से गलत डायरेक्टरी संरचना बन जाएगी।

जैसे ही आप वास्तविक विकास में प्रवेश करते हैं, classpath और -d विकल्प अधिकाधिक महत्वपूर्ण हो जाते हैं
इनके नामों को शुरुआती ही पहचान लेना भविष्य की सीख को आसान बना देगा।

सारांश

जावा प्रोग्राम चलाने के लिए, आपको तीन-चरणीय प्रक्रिया को समझना होगा: स्रोत कोड लिखें → संकलित करें → चलाएँ
एक बार javac (संकलन) और java (निष्पादन) की भूमिकाएँ स्पष्ट हो जाएँ, तो संकलन का उद्देश्य स्पष्ट हो जाता है।

सबसे आम दो शुरुआती समस्याएँ हैं:

  • JDK स्थापित नहीं है या PATH कॉन्फ़िगर नहीं है
  • फ़ाइल नाम सार्वजनिक क्लास नाम से मेल नहीं खाता

इनको शुरुआती ही संबोधित करके, आप अपनी सीख प्रक्रिया में अनावश्यक मोड़ से बच सकते हैं।
एक बार जब आप सहज हो जाएँ, तो आप IDE-आधारित विकास की ओर बढ़ सकते हैं, लेकिन मूल तंत्र को समझना आपकी सीखने की गति को काफी बढ़ा देगा।

इस लेख को शुरुआती बिंदु के रूप में उपयोग करें और पहले एक एकल .java फ़ाइल को सफलतापूर्वक .class फ़ाइल में बदलने पर ध्यान दें।
वह क्षण जावा सीखने में आपका पहला वास्तविक माइलस्टोन दर्शाता है।

अक्सर पूछे जाने वाले प्रश्न: जावा संकलन के बारे में सामान्य प्रश्न

Q1: javac और java में क्या अंतर है?
A: javac वह संकलन कमांड है जो .java फ़ाइलों को .class फ़ाइलों में बदलता है।
java वह निष्पादन कमांड है जो JVM पर .class फ़ाइलों को चलाता है।

Q2: Sample.class क्यों नहीं बनती?
A: सबसे आम कारण फ़ाइल नाम और public class नाम के बीच असंगति है।
यदि क्लास public class Sample है, तो फ़ाइल का नाम Sample.java होना चाहिए।

Q3: यदि मैं IDE का उपयोग करता हूँ तो क्या मुझे अभी भी javac सीखना चाहिए?
A: IDE कोड को स्वचालित रूप से संकलित करते हैं, लेकिन प्रक्रिया को समझे बिना यह जानना कठिन हो सकता है कि पर्दे के पीछे क्या हो रहा है। एक बार मूल प्रवाह का अनुभव करने से IDE का उपयोग बहुत आसान हो जाता है।

Q4: मुझे कौन सा JDK स्थापित करना चाहिए?
A: शुरुआती लोगों के लिए, Eclipse Adoptium (Temurin) के LTS संस्करण उपयोग में आसान हैं।
यदि आपकी कोई विशेष आवश्यकता नहीं है, तो Java 17 या 21 सुरक्षित विकल्प हैं।

Q5: मुझे javac: command not found मिल रहा है
A: इसका मतलब है कि JDK स्थापित नहीं है या PATH कॉन्फ़िगर नहीं है।
पहले, javac -version से जांचें।