2011-01-31 20 views
17

मैंजावा में मुख्य विधि से एक और तरीका बुला

class foo{ 

    public static void main(String[] args){ 
     do(); 
    } 

    public void do(){} 


} 

लेकिन तब जब मैं कमांड लाइन पर आदेश java foo चलाकर main से do() फोन, जावा शिकायत है कि आप से एक विधि कॉल नहीं कर सकते एक स्थिर समारोह।

तो मेरा सवाल यह है कि: आप मुख्य विधि से विधियों को कैसे कॉल करते हैं और यदि यह संभव नहीं है तो जावा कमांड का उपयोग करके कमांड लाइन से प्रोग्राम चलाने के बाद विधियों को कॉल करने के लिए कुछ वैकल्पिक रणनीतियां क्या हैं।

+7

शब्द "डू" एक कीवर्ड है, आप इस तरह की विधि का नाम नहीं दे सकते। पूंजी पत्र से शुरू होने वाले नाम वर्गों (कम से कम बहुत ही बुनियादी) सम्मेलनों के साथ चिपके रहें। – maaartinus

उत्तर

35

आप केवल वर्ग का एक उदाहरण के खिलाफ do() की तरह उदाहरण विधि (जो एक अवैध विधि का नाम है, संयोग से) कॉल कर सकते हैं:

public static void main(String[] args){ 
    new Foo().doSomething(); 
} 

public void doSomething(){} 

वैकल्पिक रूप से, के रूप में अच्छी doSomething() स्थिर बनाने के लिए, कि अगर आपके डिजाइन के लिए काम करता है ।

+2

इसे स्थिर मत बनाओ, यह कोई विकल्प नहीं है। यह काम करता है, लेकिन कुछ स्थिर बनाने के लिए एक अच्छा कारण होना चाहिए। – maaartinus

+2

@मार्टिनस: जब आप कोड के बारे में कुछ भी नहीं करते हैं तो आप उस तरह के व्यापक वक्तव्य को बना सकते हैं? – skaffman

+0

क्या मैं नहीं कर सकता? निश्चित रूप से, और जानने के बिना, मैं नहीं कर सकता। हालांकि, क्या मौका है कि मुख्य से बुलाया जाने वाला एकमात्र तरीका स्थैतिक होना चाहिए? स्थैतिक तरीकों के लिए बहुत कम वैध कारण हैं, कि उनका उपयोग करना लगभग एक अच्छा विचार नहीं है। विशेष रूप से नए लोगों के लिए। – maaartinus

13

मुख्य विधि से पहले स्थैतिक के लिए जांचें, यह विधि को विधि विधि के रूप में घोषित करता है, जिसका अर्थ है कि इसे कॉल करने के लिए कोई उदाहरण की आवश्यकता नहीं है। इसलिए जब आप एक गैर स्थैतिक विधि कॉल करने जा रहे हैं, जावा शिकायत करता है क्योंकि आप एक तथाकथित "इंस्टेंस विधि" को कॉल करने का प्रयास कर रहे हैं, जिसे निश्चित रूप से पहले एक उदाहरण की आवश्यकता है;)

यदि आप कक्षाओं के बारे में बेहतर समझ चाहते हैं और उदाहरण, उदाहरण और कक्षा विधियों के साथ एक नई कक्षा बनाएं, अपने मुख्य पाश में एक ऑब्जेक्ट बनाएं और विधियों को कॉल करें!

class Foo{ 

    public static void main(String[] args){ 
     Bar myInstance = new Bar(); 
     myInstance.do(); // works! 
     Bar.do(); // doesn't work! 

     Bar.doSomethingStatic(); // works! 
    } 
} 

class Bar{ 

    public do() { 
    // do something 
    } 

    public static doSomethingStatic(){ 
    } 
} 

यह भी याद रखें, जावा में कक्षाएं अपरकेस अक्षर से शुरू होनी चाहिए।

1

आप क्योंकि एक स्थिर लेकिन अन्य (कर()) नहीं

  1. नया उदाहरण बना सकते हैं और कर आह्वान() की तरह new Foo().do();
  2. मेकअप है आपका मुख्य विधि में do() उपयोग करने के लिए वहाँ 2 विकल्प हैं चाहते हैं static do() विधि

इस sun tutorial

7

पर एक नज़र डालें यह एक मौलिक संयुक्त राष्ट्र है जावा में बकाया, लेकिन नए प्रोग्रामर के लिए थोड़ा मुश्किल हो सकता है। स्थिर और आवृत्ति विधि के बीच अंतर पर थोड़ा सा शोध करें। मूल अंतर यह है कि इंस्टेंस विधि() केवल कक्षा foo के उदाहरण के लिए सुलभ है।

आपको कक्षा को तुरंत चालू करना होगा, एक ऑब्जेक्ट बनाना होगा, जिसका उपयोग आप इंस्टेंस विधि को कॉल करने के लिए करते हैं।

मैंने आपको दो टिप्पणियों और उदाहरण के साथ उदाहरण शामिल किया है।

public class SomeName { 

//this is a static method and cannot call an instance method without a object 
public static void main(String[] args){ 

    // can't do this from this static method, no object reference 
    // someMethod(); 

    //create instance of object 
    SomeName thisObj = new SomeName(); 
    //call instance method using object 
    thisObj.someMethod(); 
} 

//instance method 
public void someMethod(){ 
    System.out.print("some message..."); 
} 

}// end class SomeName 
+0

चीजों को मुख्य() से कॉल करने का यह सबसे सामान्य तरीका है। –

0

पहला जावा आपको do() विधि रखने की अनुमति नहीं देगा। इसके बजाय आप इसे doOperation() बना सकते हैं।

दूसरा आप स्थैतिक फ़ंक्शन से सीधे गैर स्थैतिक तरीकों का आह्वान नहीं कर सकते हैं। Main एक स्थिर कार्य है। आपको पहले कक्षा को तुरंत चालू करने की आवश्यकता है और फिर उस उदाहरण का उपयोग करके विधि का आह्वान करना होगा।

तीसरा आप स्थैतिक विधि सीधे गैर स्थैतिक तरीकों से आह्वान कर सकते हैं।

3

आप इसे कई तरीकों से कर सकते हैं। यहां दो हैं। चीयर्स!

package learningjava; 

public class helloworld { 
    public static void main(String[] args) { 
     new helloworld().go(); 
     // OR 
     helloworld.get(); 
    } 

    public void go(){ 
     System.out.println("Hello World"); 
    } 
    public static void get(){ 
     System.out.println("Hello World, Again"); 
    } 
} 
संबंधित मुद्दे