Friday, 15 January 2010

java - Having a try-catch block, should you place ALL statements in it or just the unsafe one? -


मान लें कि save फेंकता है और i का उपयोग केवल सहेजें। निम्नलिखित कोड टुकड़े समान हैं? कृपया सेटैटिक्स, प्रदर्शन और अन्य पहलुओं पर विचार करें।

  शून्य बब () {int i = calculate (); कोशिश {सहेजें (i); } पकड़ (अपवाद ई) {रिपोर्ट (ई)}}   

बनाम।

  शून्य बब () {{int i = calculate (try)} बचाने के (मैं); } पकड़ (अपवाद ई) {report (e)}}   

आम तौर पर मैं जानना चाहता हूं, एक try-catch ब्लॉक या सिर्फ एक फेंकता है।

सिमेंटिक-वार, यदि आपके पास है तय किया गया कि आप किस तरीके से अपनी कोशिश-पकड़ बनाने में काम कर रहे हैं (और आप आरामदायक हैं कि आपने यह फैसला सही तरीके से किया है), तो उत्तर काफी सरल है:

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

    यदि आप ऊपर दिए गए सलाह को सही तरीके से पालन करते हैं, तो वांछित कार्यक्रम के प्रवाह और स्थानीय चर की सबसे अधिक दक्षता जैसे चिंताओं को बहुत आसानी से सुलझाया जाएगा जाहिर है (ज्यादातर मामलों में) आप देखेंगे कि यह नीडिंत प्रयास करें ब्लॉकों की संभावना को बाहर नहीं करता है।

    प्रदर्शन-वार, अपवाद से निपटने का ओवरहेड वास्तव में है फेंकने और एक throwable वस्तु को पकड़ने दूसरे शब्दों में, वास्तव में ओवरहेड केवल अगर कोई अपवाद वास्तव में होता है कोड में एक प्रयास-पकड़ बनाने की मात्र उपस्थिति किसी भी मापन योग्य ओवरहेड (संभावित रूप से कोई भी नहीं) शुरू नहीं करता है इसके अलावा, बयान की राशि (किसी दिए गए प्रयास-कैच निर्माण के अंदर) पूरी तरह से अपने प्रदर्शन के लिए अप्रासंगिक है।

    संपादित करें: मुझे JVM विनिर्देश में कोई विवरण नहीं मिल सका लिंक करने के लिए, लेकिन उन उपयोगकर्ताओं द्वारा कई पोस्ट हैं जो जनरेट किए गए बाइटकोड की जांच करते हैं और उनकी व्याख्या करते हैं, और (कई अन्य लोगों के बीच - एक Google खोज कुछ रोचक परिणाम देगा)। मेरे लिए, ऐसा लगता है कि जावा कम्पाइलर जितना संभव हो उतना कम करने के लिए कोशिश करता है (बेशक, वास्तविक कोड जिसे आप कोशिश करें में डालते हैं और पकड़ खंड और कुछ अपरिहार्य कार्यक्रम प्रवाह निर्देश चारों ओर कूदने के लिए कहा गया है या अपवाद ऑब्जेक्ट पॉप, यदि कोई हो)। यह वीएम को यह पता लगाने की ज़िम्मेदारी है कि कोई अपवाद पकड़ा जाने वाला उम्मीदवार कहां है। यह संभवतया परिस्थितियों में अधिक बोझ स्थानांतरित करता है जहां अपवाद वास्तव में होता है लेकिन, जैसा कि हम जानते हैं, असाधारण मामलों के लिए अपवाद हैं, वैसे भी प्रवाह को नियंत्रित नहीं किया जाता है।

    मैं स्वीकार करता हूं कि सी + + अपवाद आमतौर पर कैसे कार्यान्वित किया जाता है , लेकिन यह बहुत ही उचित है कि वे जावा से भिन्न हैं, सी ++ प्रोग्राम पर विचार करने से आमतौर पर वीएम की सहायता से नहीं चलती।

No comments:

Post a Comment