2012-10-11 14 views
5

मैं कुछ जवाब के लिए खोज की है, लेकिन नहीं & इसलिए मैं एक नया सवाल के रूप में इस की परवरिश कर रहा हूँ मिल सकता है। कोशिश-पकड़ में पकड़ विधि। क्या यह एक विधि है? , यह एक अपवाद के रूप में अपवाद का एक वस्तु ले रहा है। लेकिन अगर इसकी एक विधि है,जावा में एक विधि पकड़ो है?

  1. इस विधि को कौन कॉल करता है और किस विधि से इस विधि को बुलाया जाता है?

  2. आप एक विधि किसी अन्य विधि परिभाषा के अंदर normally.So अगर इसकी एक विधि परिभाषा नहीं लिख सकते हैं, मैं कैसे किसी अन्य विधि के अंदर पकड़ लिखने में सक्षम हूँ?

  3. यदि यह कोई विधि नहीं है, तो यह क्या है?

    public void foo() { 
    
        try { ; 
    
        } catch (Exception ex) { 
    
          ; // this is catch method body 
         } 
    
    } 
    

उपरोक्त कोड का मतलब पकड़ विधि शरीर किसी अन्य विधि foo() के शरीर के अंदर है।

उत्तर

11

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

के रूप में टिप्पणी में बताया, यह करने के लिए, कहते हैं, एक समान है अगर बयान (यदि आप एक "पैरामीटर" जो एक बूलियन अभिव्यक्ति है लेने के रूप में यह देख सकते हैं, लेकिन वैसे ही इस एक विधि या तो नहीं है।)

+0

कि 'ex' (इस मामले में) एक स्थानीय चर है? या एक पैरामीटर? –

+0

@YoushaAleayoub आप इसे एक प्रकार (प्रकार) पैरामीटर के रूप में देख सकते हैं, हालांकि कुछ अंतर हैं। – berry120

5

यह एक भाषा है, तो या जब या के लिए

0

पकड़ने एक तरीका नहीं है के लिए इसी तरह निर्माण है। कोशिश-पकड़ ब्लॉक ब्लॉक के दौरान समान है।

do{ 
    statements; 
} while (condition); 

प्रत्येक पकड़ ब्लॉक एक अपवाद हैंडलर है और इसके तर्क द्वारा संकेतित अपवाद के प्रकार को संभालता है।

2

इस विधि को कौन कॉल करता है और किस विधि से इस विधि को बुलाया जाता है?

JVM यह कार्यान्वित करता है, तो निर्दिष्ट अपवाद या एक व्युत्पन्न अपवाद फेंक दिया है। कोई फोन नहीं

आप सामान्य रूप से किसी अन्य विधि परिभाषा के अंदर एक विधि परिभाषा नहीं लिख सकते हैं।

आप इसे अज्ञात वर्ग लिखकर छोड़कर बिल्कुल नहीं कर सकते हैं, लेकिन यह एक और कहानी है।

तो अगर यह एक तरीका है

है यह नहीं है।

मैं किसी अन्य विधि के अंदर कैच लिखने में सक्षम कैसे हूं?

क्योंकि यह एक तरीका नहीं है।

यदि यह कोई विधि नहीं है, तो यह क्या है?

यह एक भाषा निर्माण है, जैसे कोशिश करें, करें, जबकि, स्विच, केस, कक्षा, इंटरफेस, ... हैं।

उपर्युक्त कोड का मतलब है कि कैच विधि शरीर किसी अन्य विधि foo() के शरीर के अंदर है।

नहीं, ऐसा नहीं है, क्योंकि यह कोई विधि नहीं है।

निश्चित रूप से ये सभी आत्म-विरोधाभास यह स्पष्ट करते हैं कि यह कोई विधि नहीं है?

+0

क्या यह 'ex' (इस मामले में) एक स्थानीय चर है? या एक पैरामीटर? –

+1

@YoushaAleayoub देखें [जेएलएस # 14.20] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20) [अन्य उत्तर] में उद्धृत (http://stackoverflow.com/a/12836436/207421)। – EJP

1

यह if, while जैसे एक ब्लॉक है जो केवल एक पैरामीटर स्वीकार करता है जिसे exception parameter कहा जाता है।

JLS #14.20. The try statement

एक try बयान से एक ब्लॉक निष्पादित करता है। यदि कोई मान फेंक दिया गया है और try कथन में एक या अधिक catch क्लॉज हैं जो इसे पकड़ सकते हैं, तो नियंत्रण पहले ऐसे catch खंड में स्थानांतरित कर दिया जाएगा। यदि प्रयास कथन में finally खंड है, तो कोड का एक और ब्लॉक निष्पादित किया गया है, इससे कोई फर्क नहीं पड़ता कि try ब्लॉक सामान्य या अचानक समाप्त होता है, और कोई फर्क नहीं पड़ता कि catch खंड पहले नियंत्रण दिया गया है या नहीं।

catch खंड में एक पैरामीटर है, जिसे exception parameter कहा जाता है।

CatchClause: 
    catch (CatchFormalParameter) Block