2009-12-03 13 views
12

क्या जावा फ़ाइल नाम को इसके बेस क्लास नाम के बिना जावा प्रोग्राम संकलित करने का कोई तरीका है।क्या मैं कक्षा से अलग नाम के साथ एक जावा फ़ाइल संकलित कर सकता हूं?

यदि हां, तो कृपया समझा ..

+2

मुझे समझ में नहीं आता कि आपका क्या मतलब है। आप क्या हासिल करने का प्रयास कर रहे हैं? –

+0

आप ऐसा क्यों करना चाहते हैं? एक तरफ ध्यान दें, यदि आप चाहते हैं कि आपके ऐप में एक नाम हो और आपकी मुख्य श्रेणी में कोई दूसरा हो, तो आप हमेशा अपने ऐप को जार फ़ाइल में पैकेज कर सकते हैं। – Buhb

+0

क्षमा करें मेरा मतलब सार्वजनिक वर्ग का नाम है .... मैं प्रोग्राम को संकलित करने के लिए फ़ाइल को इस (सार्वजनिक कक्षा के नाम) से सहेजना नहीं चाहता ...... क्या यह संभव है ..... – Hulk

उत्तर

23

आपका जावा फ़ाइल नाम हमेशा उस फ़ाइल के भीतर परिभाषित सार्वजनिक वर्ग को प्रतिबिंबित करना चाहिए। अन्यथा, आपको एक कंपाइलर त्रुटि मिलेगी। उदाहरण के लिए, test.java:

public class Foo {} 

इस संकलन की कोशिश कर देता है:

[[email protected]:~]% javac test.java 
test.java:1: class Foo is public, should be declared in a file named Foo.java 
public class Foo { 
    ^
1 error 

तो आप अपने फ़ाइल नाम अपने सार्वजनिक वर्ग के नाम है, जो अपने प्रश्न विवादास्पद रेंडर करने के लिए लगता है से मेल होना आवश्यक है। या तो मैं समझ नहीं पा रहा हूं कि आप क्या पूछ रहे हैं ... कुछ समय बिताने के लिए जो आप वास्तव में हासिल करने की कोशिश कर रहे हैं, एक और प्रभावी सवाल पूछने के लिए एक लंबा रास्ता तय करेगा :)

+0

धन्यवाद .... आप बिल्कुल रट हैं ..... मुझे पता है कि मुझे फ़ाइल को सार्वजनिक कक्षा के नाम से संकलित करने के लिए इसे सहेजना है ...... लेकिन क्या ऐसा करना संभव नहीं है और जावा प्रोग्राम फ़ाइल को संकलित करें इसके साथ अन्य नाम के साथ ..... – Hulk

+2

नहीं। संकलक आपको अनुमति नहीं देगा। कृपया इस प्रतिबंध को पाने की कोशिश न करें - जैसा कि अन्य ने उल्लेख किया है कि यह एक बहुत अच्छी बात है कि जावा को इसकी आवश्यकता है! यदि आप कुछ विशिष्ट लक्ष्य प्राप्त करने की कोशिश कर रहे हैं, यदि आप जो कुछ हासिल करने की कोशिश कर रहे हैं उसके बारे में अधिक जानकारी देते हैं तो हम वैकल्पिक तरीकों का सुझाव दे सकते हैं। –

+0

यदि आप अपने प्रोग्राम को एक निश्चित नाम रखना चाहते हैं, तो आपको या तो अपनी कक्षा का नाम बदलना होगा या एक नई कक्षा बनाना होगा जो प्रोग्राम को निष्पादित करेगा। – FloppyDisk

0

मुझे लगता है कि वह क्या मतलब है वास्तविक वर्ग इसके अंदर परिभाषित की तुलना में अलग नाम है जावा फाइल है।

मुझे लगता है कि यह संभव नहीं है।

3

नहीं, सार्वजनिक वर्ग का नाम फ़ाइल नाम से मेल खाना चाहिए। आंतरिक, गैर सार्वजनिक, कक्षा के नाम भिन्न हो सकते हैं।

2

आपके पास फ़ाइल नाम के समान नाम के साथ एक सार्वजनिक कक्षा होनी चाहिए। यह एक बहुत ही अच्छी बात है। जब तक वे सार्वजनिक नहीं होते हैं, तब तक आप एक ही फ़ाइल के अंदर माध्यमिक कक्षाएं प्राप्त कर सकते हैं। हालांकि वे अभी भी "डिफ़ॉल्ट" हो सकते हैं, इसलिए वे अभी भी उसी पैकेज में अन्य कक्षाओं द्वारा उपयोग किए जा सकते हैं।

यह अधिकांश भाग के लिए नहीं किया जाना चाहिए। कक्षाओं और पैकेजों के बारे में जावा के नामकरण पैटर्न में इसके बड़े फायदे हैं - एक प्रोग्रामर जीवन को बिना किसी कीमत पर आसान बनाता है।

0

नहीं। आप एक लिख सकते हैं शेल स्क्रिप्ट को संकलित करने से पहले .java फ़ाइल का नाम बदलने के लिए, लेकिन javac को फ़ाइल नाम = वर्ग नामों की आवश्यकता होती है।

(इसके अलावा खिड़कियों में, यह केस संवेदी है, तो ASDF.java Asdf.class संकलन कर सकते हैं)

1

आप जावा संकलित एपीआई का उपयोग और किसी भी जावा स्रोत आप चाहें संकलन कर सकते हैं, स्रोत नहीं एक फ़ाइल से आते हैं की जरूरत या एक असंबंधित नाम वाली फ़ाइल से आ सकता है। यह इस बात पर निर्भर करता है कि आप अपने कार्यक्रम को कैसे विकसित करना चाहते हैं। ;)

+0

कुछ उदाहरण: http://stackoverflow.com/questions/12173294/compile-code-fully-in-memory-with-javax-tools-javacompiler – Vadzim

+0

ऐसा लगता है कि जावा कंपाइल एपीआई संकलन से पहले निर्दिष्ट होने के लिए क्लासनाम की आवश्यकता है। इसलिए फ़ाइल नाम गलत होने पर स्रोत से वर्गनाम निर्धारित करने के लिए इसका उपयोग नहीं किया जा सकता है। – Vadzim

+1

@ वाडज़िम सही है, हालांकि यह सवाल नहीं है। –

0

हाँ, आप फ़ाइल (.java) के लिए कोई भी नाम चुन सकते हैं। इस फ़ाइल में कक्षाओं का नाम क्या है, इसका कोई मतलब नहीं है कि कक्षा के नाम फ़ाइल नाम से पूरी तरह अलग हो सकते हैं। आपको प्रोग्राम को फ़ाइल नाम से संकलित करना चाहिए और आपको उस प्रोग्राम के नाम से प्रोग्राम चलाया जाना चाहिए जिसमें मुख्य विधि मौजूद है। मुख्य तरीके विभिन्न वर्गों में एक से अधिक ताकि आप इसे वर्ग के नाम है, जिसमें मुख्य विधि आप चलाना चाहते हैं के साथ चलाना चाहिए हो सकता है ......

+0

यदि मैं आपको सही ढंग से समझता हूं, तो आप गलत हैं - लेकिन शायद एक उदाहरण चीजों को सीधा करने में मददगार होगा। – Till

+0

जैसा कि मुझे पता है कि मैं गलत नहीं हूं। उदाहरण के लिए कोडिंग क्लास ए के साथ एक फ़ाइल sample.java बनाएं {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग तर्क []) {स्ट्रिंग str = {""}; Println ("हाय"); B.main (एसटीआर); }} कक्षा बी {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग तर्क []) {System.out.println ("हैलो"); }} अब आप इसे javac sample.java के रूप में संकलित करते हैं और जावा ए के रूप में चलाते हैं तो आउटपुट हाय हैलो – ved

24

उत्तर देने के लिए सवाल इस उदाहरण पर एक नज़र डालें:
एक फ़ाइल नमूना बनाएँ।जावा

class A 
{ 
    public static void main(String args[]) 
    { 
     String str[] = {""}; 
     System.out.println("hi"); 
     B.main(str); 
    } 
} 
class B 
{ 
    public static void main(String args[]) 
    { 
    System.out.println("hello"); 
    } 
} 

अब आप इसे javac Sample.java के रूप में संकलन और java A के रूप में चलाने तो उत्पादन

hi 
hello 

हो जाएगा या आप java B के रूप में चलाने तो उत्पादन होगा
hello

सूचना है कि में से कोई भी कक्षाएं public चिह्नित हैं इसलिए उन्हें default पहुंच प्रदान की गई। किसी भी सार्वजनिक कक्षा के बिना फाइलों में कोई फ़ाइल नामकरण प्रतिबंध नहीं है।

+4

यह काम करता है क्योंकि न तो 'ए' और न ही 'बी' सार्वजनिक कक्षाएं हैं। अगर ए था, तो उसे एजावा में परिभाषित करना होगा। – DoctorRuss

+0

अच्छा एक ............ – Hulk

+1

अच्छा जवाब। हालांकि, अब उन्हें किसी अन्य पैकेज से एक्सेस करना असंभव है, क्योंकि वे अब सार्वजनिक नहीं हैं: (( –

0

हम फ़ाइल को कक्षा नाम के विभिन्न नाम को टॉटल सहेज सकते हैं क्योंकि जावा में हम प्रोग्राम संकलित करते हैं लेकिन हम विधि चलाते हैं। हमें अपने प्रोग्राम को फ़ाइल नाम से संकलित करना होगा और हमारे वर्ग का नाम

+1

कृपया इसे एक टिप्पणी दें। – cereallarceny

0

हां, जावा फ़ाइल फ़ाइल को विभिन्न फ़ाइल नामों के साथ संकलित करना संभव है, लेकिन आपको यह सुनिश्चित करना होगा कि अंदर परिभाषित कक्षाओं में से कोई भी सार्वजनिक नहीं है .. जब आप स्रोत फ़ाइल को संकलित करते हैं तो स्रोत फ़ाइल के अंदर कक्षाओं के लिए संबंधित .class फ़ाइलें बनाई जाती हैं।

+0

क्या आप यह कैसे करना है इसका एक सरल उदाहरण प्रदान कर सकते हैं? उदाहरण हमेशा एक अच्छी बात है! –

0

हां, आप अपने जावा स्रोत कोड फ़ाइल को किसी भी अन्य नाम से सहेज सकते हैं, जो आपके मुख्य वर्ग के नाम के समान नहीं है, लेकिन जब आप इसे बाइट कोड फ़ाइल नाम से कम करते हैं तो आपके मुख्य श्रेणी के नाम के समान होगा। इसलिए जावा कोड चलाने के लिए कई नामों को याद रखने की आपकी आसानी के लिए, आपको अपनी फ़ाइल नाम केवल अपनी फ़ाइल नाम और बाइट कोड फ़ाइल की तुलना में समान नाम के साथ होना चाहिए।

6

जब तक आपकी स्रोत फ़ाइल में सार्वजनिक कक्षा नहीं है, तब तक आप अपनी स्रोत फ़ाइल को किसी भी नाम पर नाम दे सकते हैं और संकलित कर सकते हैं। लेकिन, अगर आपके पास अपनी स्रोत फ़ाइल में कोई सार्वजनिक वर्ग है, तो उस फ़ाइल का नाम आपके वर्ग के नाम के समान होना चाहिए। अन्यथा, कंपाइलर एक त्रुटि फेंक देगा।

उदाहरण:
फ़ाइल का नाम: TestFileName.java

public class HelloWorld { 
    public static void main(String[] args) { 
     System.out.println("Hello,World\n"); 
    } 
} 

संकलन: javac TestFileName.java

त्रुटि:

TestFileName.java:1: class HelloWorld is public, should be declared in a file named HelloWorld.java 
public class HelloWorld 
    ^
1 error 
2

हाँ, हम वर्ग से एक अलग नाम के साथ एक जावा फ़ाइल संकलन है, बशर्ते कि उस फ़ाइल में कोई सार्वजनिक वर्ग नहीं होना चाहिए।

यदि फ़ाइल में कोई सार्वजनिक वर्ग है तो उस स्थिति में आपको उस नाम को फ़ाइल नाम के रूप में देना होगा। लेकिन अगर आपकी कक्षा में कोई सार्वजनिक वर्ग नहीं है तो आप कक्षा में कोई नाम दे सकते हैं।

इसे और अधिक स्पष्ट बनाने के लिए उदाहरण के नीचे देखें:

फ़ाइल नाम: sample.java

class A 
{ 
    public static void main(String args[]) 
    { 
    System.out.println("hi in Class A"); 
    } 
} 
class B 
{ 
public static void main(String args[]) 
{ 
    System.out.println("hello in class B"); 
} 
} 

तो (विंडोज़) के साथ यह संकलन: javac नमूना।वर्ग बी

कृपया जांच करें और इस बात की पुष्टि में हैलो: कक्षा एक में हाय

तो इसे चलाने: जावा

तो इसे चलाने: जावा एक

उत्पादन जावा बी

उत्पादन।

0

यदि कक्षा सार्वजनिक नहीं है तो आप इसे अन्य नाम का उपयोग करके सहेज सकते हैं जैसे क्लासनाम सरल है तो इसे Hard.java सहेजें। complie-> Hard.java रन-> Simple.java अपनी जावा फ़ाइल को केवल .java द्वारा सहेजें। संकलन javac जावा रन जावा उदाहरण के लिए yourclassname अगर मेरे कार्यक्रम मुख्य वर्ग के नाम एक तो जावा से बचाने केवल
javac द्वारा संकलन जावा
जावा द्वारा चलाए जा रहे एक

0

हाँ, हम एक संकलन कर सकते हैं कक्षा फ़ाइल से अलग नाम के साथ जावा फ़ाइल, बशर्ते कि उस फ़ाइल में कोई सार्वजनिक वर्ग न हो।

यदि सार्वजनिक फ़ाइल में कक्षा है तो उस स्थिति में आपको उस नाम को फ़ाइल नाम के रूप में देना होगा। लेकिन अगर आपकी कक्षा में सार्वजनिक कक्षा नहीं है तो आप कक्षा में कोई नाम दे सकते हैं।

उदाहरण नीचे देखें इसे और अधिक स्पष्ट करना:

फ़ाइल नाम: example.java

class A 
{ 
    public static void main(String args[]) 
    { 
    System.out.println("You are in Class A"); 
    } 
} 
class B 
{ 
public static void main(String args[]) 
{ 
    System.out.println("You are in class B"); 
} 
} 

तो साथ यह संकलन: javac example.java

तो इसे चलाने: java A

output : you are in Class A 

फिर इसे चलाएं: java B

output : you are in class B 

कृपया जांचें और पुष्टि करें।

0

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

0

चलाया जाता है अन्य उत्तर केवल व्यवहार्य समाधान somehow determine the classname from the source है के अनुसार के मुख्य तरीका प्रदान करता है चलाता है , फिर फ़ाइल का नाम उचित नाम पर पुनर्नामित करने के लिए करें और इसे सामान्य रूप से संकलित करें।

0

हां। यह संभव है।

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

तो फ़ाइल नाम और कक्षा का नाम रखने के लिए यह एक अच्छा अभ्यास है।

और आपने फ़ाइल नाम के अलावा अलग-अलग नाम के साथ कक्षा को संकलित और चलाया है, यदि आपके पास इस कक्षा में कोई सार्वजनिक तरीका नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे