2011-11-14 20 views
14

मैं जावा में कुल नोब हूं लेकिन आज रात का अभ्यास करते हुए यह हुआ कि ओओपी डिज़ाइन के साथ मुख्य वर्ग में हर विधि को स्थिर अधिकार होना चाहिए? इस कोड में कक्षा के भीतर एक विधि को कॉल करने का कोई तरीका नहीं है जो स्थैतिक नहीं है। ऐसा लगता है कि शायद मैं इस बात को याद कर रहा हूं कि आप कक्षा को स्थिर क्यों घोषित करेंगे या नहीं। आपकी सहायताके लिए धन्यवाद!क्या मुख्य वर्ग में हर विधि स्थिर होना चाहिए?

public class JavaApplication2 { 

private static CreateCar Vroom; 
private static Limo Fuuu; 

public static void main(String[] args) { 
    Vroom = new CreateCar(); 
    Vroom.creator(); 
    getGas(); 
    addGas(); 
    getGas(); 
    Fuuu = new Limo(); 
    Fuuu.creator(); 
    Fuuu.wheels = 5; 
    Fuuu.wheelie(); 
} 
public static int getGas(){ 
    Vroom.returnGas(); 
    return 0; 
} 
public static void addGas(){ 
    Vroom.fillerUp(); 
} 
} 

उत्तर

33

आप गैर स्थैतिक तरीकों को कॉल कर सकते हैं, लेकिन आप केवल किसी ऑब्जेक्ट के माध्यम से ऐसा कर सकते हैं। यही है, आपको किसी दिए गए ऑब्जेक्ट पर विधि को कॉल करने की आवश्यकता है।

आपकी मुख्य कक्षा को भी तत्कालित किया जा सकता है, इसलिए मुख्य वर्ग में हर विधि को स्थैतिक होने की आवश्यकता नहीं है। उदाहरण के लिए:

public class MainClass { 
    int value; 

    public void printValue() { 
     System.out.println("" + value); 
    } 

    public static void main(String[] args){ 
     MainClass o = new MainClass(); 
     o.printValue(); 
    } 
} 
+1

धन्यवाद जो संक्षिप्त और बहुत उपयोगी था। – Zombian

+0

धन्यवाद, इस उत्तर के लिए पूरी तरह से देख रहा था। –

+0

ऐसा करने का बेहतर तरीका क्या है, इसके भीतर कक्षा को तुरंत चालू करें या सभी विधियों को स्थैतिक घोषित करें? –

2

एर, आप एक "स्थिर मुख्य" वर्ग नहीं है। आपके JavaApplication2 कक्षा में आपके पास main नामक एक स्थिर विधि है।

उस कक्षा में कोई अन्य स्थिर विधियां रखने की आवश्यकता नहीं है। वर्ग का उपयोग करने के लिए, आप इसे का दृष्टांत चाहते हैं:

public static void main(String[] args) 
{ 
    JavaApplication2 myApp = new JavaApplication2(); 
    myApp.someMethod(); 
    ... 
} 

main एक विशेष रूप से नामित स्थिर विधि है कि एक प्रवेश बिंदु के रूप में कार्य करता है। जब आप जावा बता तरह कमांड लाइन से अपने कार्यक्रम "रन" के लिए:

जावा JavaApplication2

JVM आदेश पंक्ति तर्क में गुजर JavaApplication2.main() कहता है।

+0

आह! सुधार के लिए धन्यवाद आप सही हैं। – Zombian

3

संक्षिप्त उत्तर: हाँ।

कारण यह है कि आपके जेवीएम को आपके वर्ग के "मुख्य" को पहले से ही उस वर्ग के मौजूदा उदाहरण होने से स्वतंत्र करने की आवश्यकता है।

मामूली अर्थपूर्ण नाइट-पिकिंग: "मुख्य" एक वर्ग का सदस्य (एक स्थिर सदस्य) है; यह कक्षा का नाम ही नहीं है।

उपयोगी टिप: प्रत्येक वर्ग यह खुद है हो सकता है, विभिन्न "मुख्य()"। यूनिट-परीक्षण व्यक्तिगत कक्षाओं के लिए यह बेहद उपयोगी हो सकता है।

यह कभी कभी जहां "मुख्य()" ".exe" साथ जुड़ा हुआ है C/C++ प्रोग्रामर के लिए एक आघात के रूप में आता है, और आप केवल कभी उनमें से एक हो सकता है। जावा में, आपके पास कई "मुख्य()" विधियां हो सकती हैं, और जो भी आप रनटाइम पर चुनते हैं उसे आमंत्रित करते हैं।

+0

+1 कभी-कभी सी/सी ++ प्रोग्रामर के लिए सदमे के रूप में आता है, जहां "मुख्य()" "exe "से जुड़ा हुआ है, और आप केवल उनमें से एक हो सकते हैं ... – CoolEulerProject

7

संख्या लेकिन main विधि static होना चाहिए।

कक्षा में एक गैर स्थैतिक विधि कॉल करने के लिए, आपको लगता है कि वर्ग के वस्तु करने के लिए एक संदर्भ बनाना होगा। फिर आप संदर्भ से विधि को बुलाते हैं।

public class JavaApplication2 { 
    // non-static method 
    public void go() { 
     System.out.println("hello"); 
    } 

    public static void main(String[] args) { 
     // declare a reference 
     JavaApplication2 app; 
     // create an object 
     app = new JavaApplication2(); 
     // call a method 
     app.go(); 
    } 
} 
+0

वाह यह स्पष्टीकरण बहुत मदद करता है । धन्यवाद! – Zombian

0

संक्षिप्त उत्तर: नहीं, हर विधि को स्थैतिक होने की आवश्यकता नहीं है।

वास्तव में

:

  1. छोटे अभ्यास के लिए, यह सबसे अच्छा है अपने मुख्य विधि के लिए एक अलग वर्ग के लिए नहीं है।
  2. आप मुख्य तरीके (कई पुस्तकालयों में बहुत आम है, के परीक्षण के लिए या वर्ग के उपयोग का प्रदर्शन)
  3. आप एक जावा प्रोग्राम है, जो आम तौर पर एक जार फ़ाइल है आह्वान जब मल्टीपल क्लासों हो सकता है, आप में से एक विकल्प है आप जिस वर्ग की मुख्य विधि को
  4. को शुरुआती के रूप में शुरू करना चाहते हैं, तब तक स्थैतिक विधि से बचने का प्रयास करें जब तक कि आप सुनिश्चित न हों कि आपको उनकी आवश्यकता है। ऐसा इसलिए है क्योंकि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पर कोई भी अच्छा नहीं है, स्थिर तरीकों का उपयोग करके कार्य-उन्मुख प्रोग्रामिंग (कार्यात्मक प्रोग्रामिंग से भ्रमित नहीं होना) करने के लिए स्थिर तरीकों का आसानी से दुरुपयोग कर सकता है।
  5. एक मुख्य विधि (ध्यान दें, मैं नहीं कह रहा हूँ "" मुख्य विधि) स्थिर होने चाहिए: public static void main (String [] argv) { /* ... */ }
0

विधि, स्थिर के रूप में घोषित किया जाता है तो के रूप में वर्ग के नाम से भेजा जाना ... जैसे

Math.pow(x,y) // x^y 

इस विधि उपयोगकर्ता कहा जाता है उदाहरण के निर्माण के बारे में चिंता करने की ... के रूप में गणित अपने सभी विधि के रूप में स्थिर तो बुनियादी कारण है कि स्थिर तरीकों का इस्तेमाल किया जाता है thats की जरूरत नहीं है ....

स्थिर विधि गैर स्थिर तरीकों कॉल कर सकते हैं, हालांकि वर्ग की वस्तु

ClassName cn =new ClassNam().methodName; 

मुख्य(), है विशेष विधि, कार्यक्रम के निष्पादन के अपने शुरुआती बिंदु है, तो यू कार्यक्रम चलाने के बिना एक वस्तु कभी नहीं हो सकता और इसलिए (निष्पादन :: जावा className) की तरह इसकी भी कहा जाता है, तो इसे स्थिर होना चाहिए ...

0

स्टेटिक तरीकों का मतलब है कि आप,

public class ClassName{ 
    //no-op 
    public static void method(){//....} 
}  
ClassName.method(); 

के माध्यम से सीधे यह कॉल कर सकते हैं और, कुछ मामलों में ClassName कर सकते हैं उदा।

static import 

main method 

लेकिन एक गैर स्थैतिक विधि का आह्वान करने के लिए, आपको पहले इसे शुरू करना होगा।

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