सी में में एक स्थानीय चर प्रारंभ करने में कैसे ++, निम्नलिखित कोड:जावा केवल एक बार
#include <stdio.h>
static const char *init()
{
printf("in init()\n");
}
static void func()
{
static const char *str = init();
printf("in func()\n");
}
int main()
{
for (int i=0; i<10; ++i) {
func();
}
return 0;
}
पता चलता है कि समारोह के कई invokations() के बावजूद, str केवल एक बार से आरंभ नहीं हो जाता फ़ंक्शन init() में एक ट्रेस संदेश प्रिंट करना str प्रारंभ करने के लिए उपयोग किया जाता है। जब चलाने के लिए, वहाँ का पता लगाने के 10 लाइनों की कुल, एक बार init के लिए() समारोह()
जावा में, निम्न कोड नहीं करना चाहिए एक ही बात के लिए और 10 बार कर रहे हैं?
class test {
private String init()
{
System.out.println("in init()");
return "FOO";
}
private void func()
{
final String str = init();
System.out.println("in func()");
}
public test()
{
for (int i=0; i<10; ++i) {
func();
}
}
public static main(String[] args)
{
test app = new test();
}
}
जब चलाने के लिए, वहाँ उत्पादन का 20 लाइनों, 10 init के लिए प्रत्येक() और समारोह() हैं। मैंने अंतिम चर के बारे में जो पढ़ा है उसके आधार पर, मैंने सोचा कि यह वही व्यवहार करेगा। इसलिए मैंने स्थिर अंतिम की कोशिश की और यह संकलित नहीं होगा (न ही स्थिर) क्या ऐसा करने का कोई तरीका है? मुझे से मेरी कक्षा में कई अलग-अलग तरीकों से समय लेने वाली प्रारंभिक फ़ंक्शन को कॉल करने की आवश्यकता है, इसलिए चर को कक्षा स्कोप में ले जाना काम नहीं करेगा। आगे, चूंकि स्थानीय चर स्वचालित रूप से प्रारंभ नहीं होते हैं, इसलिए शून्य के लिए मान को मानने से पहले चर के चारों ओर परीक्षण शामिल नहीं हो सकता है। मुझे लगता है कि मैं अपनी कक्षा में प्रत्येक विधि के लिए कक्षा के दायरे में एक चर बना सकता हूं, लेकिन इसे प्रबंधित करने में दर्द होता है। सबसे अच्छा सादृश्य कुछ अगर मैं हर विधि में निम्नलिखित की तरह कुछ शामिल करने के लिए थे होगा: इस मामले प्रत्येक विधि में एक अनूठा मूल्य मिल जाएगा में
public myfunc1()
{
final String funcName = java.lang.Thread.currentThread().getStackTrace()[1].getMethodName();
}
public myfunc2()
{
final String funcName = java.lang.Thread.currentThread().getStackTrace()[1].getMethodName();
}
funcName, लेकिन प्रारंभ महंगा है।
आपको स्ट्रिंग स्ट्र और फ़ंक्शन init() को स्थिर करने की आवश्यकता है स्थिर – maverik
_str_ _static_ नहीं हो सकता है, यह संकलित नहीं होगा। _init() _ _static_ नहीं हो सकता क्योंकि यह उदाहरण डेटा पर निर्भर करता है। – Xaq
http: // ideone।कॉम/एनएनएन 6 एम 9 – maverik