java मैं जावा में बिना अपवाद फेंकने की कोशिश/कैच ब्लॉक से कैसे टूट सकता हूं




try-catch-finally (6)

आप इसे हमेशा लूप कंस्ट्रक्शन से break साथ कर सकते हैं या इनोबीज़ उत्तर में निर्दिष्ट लेबल पर break लगा सकते हैं।

public static void main(String[] args) {
    do {
        try {
            // code..
            if (condition)
                break;
            // more code...
        } catch (Exception e) {

        }
    } while (false);
}

मुझे एक अपवाद को फेंकने के बिना कोशिश / पकड़ने ब्लॉक के बीच से तोड़ने का एक तरीका चाहिए। कुछ जो ब्रेक के समान है और लूप के लिए जारी है। क्या यह संभव है?

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

तो, किसी भी सीधे आगे के समाधान के बारे में मुझे पता नहीं है?


विभिन्न तरीके:

  • return
  • एक लूप में break या continue पर
  • एक लेबल स्टेटमेंट में लेबल break लिए (@ aioobe का उदाहरण देखें)
  • जब एक स्विच स्टेटमेंट में break

...

  • System.exit() ... हालांकि इसका मतलब यह नहीं है कि आप क्या चाहते हैं।

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

लेकिन जब लेबल अस्पष्ट होते हैं, तो मेरी राय में कोड को do ... while (false) में लपेटना do ... while (false) ताकि आप break का उपयोग कर सकें यह एक बुरा विचार है। यह गैर-नौसिखियों के साथ-साथ नौसिखियों को भ्रमित करेगा। लेबल वाले बयानों के बारे में जानने के लिए नौसिखियों (और गैर-नौसिखियों!) के लिए बेहतर है।

वैसे, return उस मामले में काम करता है जहां आपको finally बाहर जाने की जरूरत होती है। लेकिन आपको finally ब्लॉक में return करने से बचना चाहिए क्योंकि शब्दार्थ थोड़ा भ्रमित करने वाला होता है, और पाठक को सिरदर्द देने के लिए उत्तरदायी होता है।


return बारे return यह कैसे होगा, अगर कोई finally नहीं है


यह वह कोड है जो मैं आमतौर पर करता हूं:

 try
 {
    ...........
    throw null;//this line just works like a 'break'
    ...........   
  }
  catch (NullReferenceException)
  { 
  }
  catch (System.Exception ex)
  {
      .........
  }

ऐसा करने का उचित तरीका संभवतः एक अलग विधि में ट्राई-कैच ब्लॉक को लगाकर विधि को तोड़ना है, और रिटर्न स्टेटमेंट का उपयोग करना है:

public void someMethod() {
    try {
        ...
        if (condition)
            return;
        ...
    } catch (SomeException e) {
        ...
    }
}

यदि कोड में बहुत सारे स्थानीय चर शामिल हैं, तो आप एक लेबल ब्लॉक से break का उपयोग करने पर भी विचार कर सकते हैं, जैसा कि स्टीफन सी द्वारा सुझाया गया है :

label: try {
    ...
    if (condition)
        break label;
    ...
} catch (SomeException e) {
    ...
}

इसे करने के कई तरीके हैं:

  1. एक नई विधि में कोड को स्थानांतरित करें और उससे return

  2. कोशिश करें / पकड़ को एक do{}while(false); लपेटें do{}while(false); पाश।





try-catch-finally