2012-02-29 4 views
6

में अपवाद का प्रचार कैसे करें मैं एक सी प्रोग्रामर हूं और हाल ही में कुछ जावा सीख रहा हूं क्योंकि मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं। वर्तमान में मैं एक परिस्थिति में हूं। एक है निम्नलिखित है।जावा

public Class ClassA{ 

public ClassA(); 

public void MyMethod(){ 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    catch(ExceptionType2 Excp2){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    } 
} 

अब मैं किसी अन्य वर्ग में कहीं और विधि MyMethod() को कॉल करने के लिए उपयोग करना चाहता हूं। अगर कोई मुझे कुछ कोड स्निपेट प्रदान कर सकता है तो MyMethod() के कॉलर को अपवादों का प्रचार कैसे करें ताकि मैं उन्हें कॉलर विधि में एक संवाद बॉक्स में प्रदर्शित कर सकूं।

क्षमा करें अगर मैं इस प्रश्न पूछने के तरीके में इतना स्पष्ट और अजीब नहीं हूं।

+1

यह भी देखें http://stackoverflow.com/questions/409563/best-prac tices के लिए अपवाद प्रबंधन में जावा या सी तेज – mglauche

उत्तर

20

बस पहली जगह में अपवाद को पकड़ने नहीं है, और अपने विधि घोषणा बदलें कि वह उन्हें प्रचार कर सकते हैं:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // Some code here which can throw exceptions 
} 

आप तो प्रचार कुछ कार्रवाई और लेने के लिए की जरूरत है, आप कर सकते हैं यह rethrow:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    try { 
     // Some code here which can throw exceptions 
    } catch (ExceptionType1 e) { 
     log(e); 
     throw e; 
    } 
} 

यहाँ ExceptionType2 सब पर पकड़ा नहीं है - यह सिर्फ स्वचालित रूप से प्रचार करेंगे। ExceptionType1 पकड़ा, लॉग किया गया है, और फिर पुनर्स्थापित किया गया है।

यह पकड़ ब्लॉक के लिए नहीं एक अच्छा विचार है जो सिर्फ rethrow एक अपवाद - जब तक कि वहाँ कुछ सूक्ष्म कारण नहीं है (उदाहरण के लिए यह से निपटने से एक अधिक सामान्य कैच ब्लॉक रोकने के लिए) आप सामान्य रूप से सिर्फ कैच ब्लॉक बजाय निकाल देना चाहिए ।

0

बस अपवाद

rethrow

throw Excp1;

आप इस

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
     throw Excp1; 
    } 
    catch(ExceptionType2 Excp2){ 
     throw Excp2; 
    } 
} 

तरह MyMthod() घोषणा करने के लिए अपवाद प्रकार जोड़ने के लिए या सिर्फ बिल्कुल try छोड़ देते हैं, क्योंकि आप नहीं रह रहे हैं की आवश्यकता होगी अपवादों को संभालना, जब तक कि आप इसे हटाने से पहले अपवाद के साथ काम करने वाले कैच स्टेटमेंट में कुछ अतिरिक्त कोड डालते हैं।

2

इसे पकड़ो और फिर से दोबारा नहीं डालें। बस

public void someMethod() { 
    try { 
     myMethod(); 
    } catch (ExceptionType1 ex) { 
     // show your dialog 
    } catch (ExceptionType2 ex) { 
     // show your dialog 
    } 
} 
0

ऐसा करने और जगह में इसे पकड़ आप चाहते हैं

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // other code 
} 

उदाहरण मैं हमेशा इस तरह यह करना: तो

public void MyMethod() throws Exception 
{ 
    //code here 
    if(something is wrong) 
     throw new Exception("Something wrong"); 
} 

जब आप समारोह

try{ 
    MyMethod(); 
    }catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 
फोन