2010-09-14 40 views
7

में एक विधि को कैसे कॉल करें, जावा में उसी पैकेज का एक और वर्ग? मुझे पता है कि किसी ऑब्जेक्ट का उपयोग करके हम एक अलग वर्ग से एक विधि कॉल कर सकते हैं। क्या विभिन्न वर्ग की विधि को कॉल करने का कोई अन्य तरीका है?जावा में कोई विधि कैसे कॉल करें?

+0

संपादित करें द्वारा: लिंक अब मान्य नहीं है - करने के लिए ओरेकल जावा ट्यूटोरियल लिंक बदल दिया है। [जावा स्टेटिक तरीके] (http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) – Yeonho

उत्तर

1

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

3

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

public class Foo { 
    public static String Bar() { 
     return "bla"; 
    } 
} 

उस स्थिति में आप इसे Foo.Bar() से कॉल कर सकते हैं।

4

तरीके ऑब्जेक्ट विधियां या कक्षा विधियों हैं।

ऑब्जेक्ट विधियां: यह किसी ऑब्जेक्ट पर लागू होता है।

instance.method(args...); 

कक्षा तरीके:: यह एक वर्ग के ऊपर लागू होता है आप एक उदाहरण का उपयोग करना होगा। इसका कोई अंतर्निहित उदाहरण नहीं है। आपको कक्षा का उपयोग करना होगा। यह प्रक्रियात्मक प्रोग्रामिंग की तरह है।

ClassWithStaticMethod.method(args...); 

प्रतिबिंब

प्रतिबिंब आप प्रोग्राम तरीकों का उपयोग करने के लिए एक एपीआई है के साथ, वे वस्तु या वर्ग के तरीकों हो।

उदाहरण तरीके: methodRef.invoke(instance, args...); कक्षा तरीके: methodRef.invoke(null, args...);

1

आप एक स्थिर विधि बना सकते हैं या निर्माता में फ़ंक्शन को कॉल अपने वर्ग के एक सदस्य के रूप में अन्य वर्ग उपयोग कर सकते हैं।

public class aClass { 
     private SomeOtherClass oc; 
     public class aClass(SomeOtherClass otherClass) { 
     oc = otherClass; 
     } 

     public callOtherClassMethod() { 
     oc.otherClassMethod(); 
     } 
    } 
7

कक्षा बी का एक उदाहरण बनाएँ:

B b=new B(); 
b.method(); 

या कक्षा बी में एक स्थिर विधि को परिभाषित:

class B 
{ 
static void staticMethod(); 
} 

और इसे इस तरह कहते हैं:

B.staticMethod(); 
0

इसे इस प्रारूप में करें:

classmehodisin.methodname();

उदाहरण के लिए:

MyClass1.clearscreen();

मुझे आशा है कि इस helped.` नोट: विधि स्थिर होना चाहिए।

2

फ्रेड Swartz (fredosaurus) नोट्स से:

तरीकों में से दो प्रकार के होते हैं।

  • उदाहरण तरीकों एक वस्तु के साथ जुड़े और उस वस्तु की उदाहरण चर का उपयोग कर रहे हैं। यह डिफ़ॉल्ट है।

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

एक स्थिर कॉल

योग्यता परिभाषित वर्ग बाहर से, एक उदाहरण विधि, जैसे, inputTF.setText("");

एक वस्तु है, जो तब उदाहरण विधि के लिए एक अंतर्निहित पैरामीटर के रूप में पारित हो जाता है के साथ लगाकर द्वारा कहा जाता है

क्लास नाम के साथ इसे उपसर्ग करके एक स्थिर विधि कहा जाता है, उदाहरण के लिए, Math.max(i,j);। उत्सुकता से, यह किसी ऑब्जेक्ट के साथ भी योग्यता प्राप्त की जा सकती है, जिसे अनदेखा कर दिया जाएगा, लेकिन ऑब्जेक्ट की कक्षा का उपयोग किया जाएगा।

class MyUtils { 
    . . . 
    //================================================= mean 
    public static double mean(int[] p) { 
     int sum = 0; // sum of all the elements 
     for (int i=0; i<p.length; i++) { 
      sum += p[i]; 
     } 
     return ((double)sum)/p.length; 
    }//endmethod mean 
    . . . 
} 

केवल डेटा इस विधि का उपयोग करता है या परिवर्तन मानकों (या निश्चित रूप से स्थानीय चर) से है:

उदाहरण

यहाँ एक ठेठ स्थिर तरीका है।

क्यों ऊपर mean() विधि बस के रूप में अच्छी तरह से करता है, तो यह स्थिर घोषित नहीं किया गया था, जब तक कि यह एक ही कक्षा के भीतर से बुलाया गया था काम करेगा एक विधि static

घोषणा करते हैं। यदि कक्षा के बाहर से बुलाया जाता है और इसे स्थैतिक घोषित नहीं किया गया था, तो उसे किसी वस्तु के साथ योग्य (बेकार) होना होगा। यहां तक ​​कि जब कक्षा के भीतर उपयोग किया जाता है, तब भी एक विधि को यथासंभव स्थैतिक रूप से परिभाषित करने के अच्छे कारण होते हैं।

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

कॉलिंग स्थिर तरीकों

वहाँ दो मामले हैं।

एक ही कक्षा

के भीतर से कहा जाता है बस स्थिर विधि नाम लिखें। उदाहरण के लिए:

// Called from inside the MyUtils class 
double avgAtt = mean(attendance); 

वर्ग

तो एक विधि (स्थिर या उदाहरण) अन्य वर्ग से कहा जाता है बाहर से बुलाया, कुछ वर्ग निर्दिष्ट करने के लिए विधि नाम से पहले दिया जाना चाहिए जहां विधि है परिभाषित। उदाहरण के लिए, यह ऑब्जेक्ट है कि विधि का उपयोग होगा। स्थिर तरीकों के लिए, कक्षा का नाम निर्दिष्ट किया जाना चाहिए। उदाहरण के लिए:

// Called from outside the MyUtils class. 
double avgAtt = MyUtils.mean(attendance); 

एक वस्तु से पहले निर्दिष्ट है, तो वस्तु मूल्य नजरअंदाज कर दिया जाएगा और वस्तु की कक्षा इस्तेमाल किया जाएगा।

एक्सेस करना स्थैतिक चर

हालांकि एक static विधि उदाहरण चर का उपयोग नहीं कर सकते हैं, यह static चर पहुँच सकते हैं। स्थैतिक चर का एक सामान्य उपयोग "स्थिरांक" को परिभाषित करना है। जावा लाइब्रेरी के उदाहरण Math.PI या Color.RED हैं। वे कक्षा के नाम से योग्य हैं, इसलिए आप जानते हैं कि वे static हैं। कोई भी विधि, static या नहीं, static चर का उपयोग कर सकते हैं। इंस्टेंस वैरिएबल को केवल इंस्टेंस विधियों द्वारा एक्सेस किया जा सकता है।

वैकल्पिक कॉल

क्या एक छोटे से अजीब है, और अनुशंसित नहीं, कि एक वर्ग की एक वस्तु स्थिर तरीकों का उपयोग करने में वर्ग के नाम के स्थान पर इस्तेमाल किया जा सकता है। यह बुरा है क्योंकि यह इंप्रेशन बनाता है कि ऑब्जेक्ट में कुछ इंस्टेंस चर का उपयोग किया जाता है, लेकिन ऐसा नहीं है।

-1

विधि बुला

public class a 
{ 
    void sum(int i,int k) 
    { 
     System.out.println("THe sum of the number="+(i+k)); 
    } 
} 
class b 
{ 
    public static void main(String[] args) 
    { 
     a vc=new a(); 
     vc.sum(10 , 20); 
    } 
} 
+0

कक्षा का एक उदाहरण घोषित करके, उदाहरण में 'vc' नाम दिया गया है और विधि को कॉल करना है उदाहरण – bradbury9

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