2012-05-17 14 views
5

अपवाद प्रसार क्या है?अपवाद प्रचार क्या है?

मैंने Google में कोशिश की लेकिन परिणाम से संतुष्ट नहीं। यदि संभव हो तो कृपया कुछ उदाहरण के साथ समझाएं। सी ++, PHP और जावा भाषा बेहतर है।

+0

काउंटरक्वेशन: आपने इसके बारे में कहां पढ़ा - संदर्भ क्या है? – home

+0

इस प्रश्न के साथ क्या गलत है। क्यों मतदान किया? –

+0

-1: @ डियर: एक डाउनवोट का अर्थ है (टूलटिप कहता है), "कोई शोध प्रयास नहीं दिखाता है।" और nes1983 से जवाब पर विचार करते हुए, यह जरूरी लग रहा था। –

उत्तर

10

यह Java tutorial page about exceptions में आश्चर्यजनक रूप से समझाया गया है।

एक अपवाद विधि से विधि तक, कॉल स्टैक तक फैलता है, जब तक यह पकड़ा नहीं जाता है। इसलिए यदि a()b() पर कॉल करता है, जो c() पर कॉल करता है, जो d() पर कॉल करता है, और d() अपवाद फेंकता है, तो अपवाद डी से सी से बी तक फैल जाएगा, जब तक कि इनमें से कोई भी तरीका अपवाद को पकड़ नहीं लेता है।

0

मान लें कि आपके पास एक ऑब्जेक्ट है जो किसी अन्य ऑब्जेक्ट को कॉल करता है और फिर कोई दूसरा कॉल करता है। यदि किसी भी बुलाए गए ऑब्जेक्ट में अपवाद फेंक दिया जाता है और इसे पकड़ा नहीं जाता है, तो अपवाद कॉलिंग विधि को प्रचारित करता है (और यदि कहीं भी पकड़ा नहीं जाता है तो एप्लिकेशन को क्रैश करता है)। myMethod विधि निष्पादित किया जाता है एक अपवाद वस्तु A की doSomething विधि में फेंक दिया जाएगा, और अपवाद स्टैक में प्रेरक विधि को प्रसारित

class MyClass{ 

void myMethod(){ 
    A a = new A(); 
    a.doSomething(0); 
} 

} 

class A{ 

    double doSomething(int n){ 
    return 1/n; 
    } 

} 

हैं (ताकि अपवाद myClass की myMethod को इस उदाहरण में प्रसारित)।

+0

दाएं। मैंने जवाब सही कर दिया है। धन्यवाद! – Averroes

0

किसी प्रोग्राम को बनाने में, जिस स्थान पर कोई त्रुटि होती है वह इसे संभालने के लिए सबसे अच्छी जगह नहीं है यानी त्रुटि उस जगह के स्थान पर होती है जहां यह हुआ है।

10

लघु जवाब: Uncaught अपवाद कॉल स्टैक में उगाया जाता है जब तक ढेर खाली हो जाता है, इस प्रचार अपवाद प्रचार कहा जाता है।

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

कहना चलें, हम तरीकों की एक श्रृंखला जहां method3() Method2() और Method2 कॉल() Method1 कॉल()। तो जब

1) विधि 3() और विधि 3 में एक अपवाद होता है() हमारे पास कोई अपवाद हैंडलर नहीं है।

2) न आया हुआ अपवाद स्टैक में नीचे प्रचारित किया जाएगा यानी यह Method2 में उचित अपवाद संचालक की जाँच करेगा()।

3) एक बार फिर Method2 में हम किसी भी अपवाद संचालक उसके बाद फिर से अपवाद है, जहां यह अपवाद संचालक पाता Method1() करने के लिए नीचे प्रचारित किया जाता है नहीं है, तो।

enter image description here

उदाहरण:

class ExceptionPropagation{ 

    void method3(){ 
    int result = 100/0; //Exception Generated 
    } 

    void method2(){ 
    method3(); 
    } 

    void method1(){ 
    try{ 
    method2(); 
    } catch(Exception e){ 
    System.out.println("Exception is handled here"); 
    } 
    } 

    public static void main(String args[]){ 
    ExceptionPropagation obj=new ExceptionPropagation(); 
    obj.method1(); 
    System.out.println("Continue with Normal Flow..."); 
    } 
} 

आउटपुट:

अपवाद यहाँ नियंत्रित किया जाता है

सामान्य प्रवाह के साथ जारी रखें ...

केवल अनचेक अपवाद प्रचारित हैं। जांचे हुए अपवादों फेंक संकलन त्रुटि

[1] http://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html

[2] http://www.c4learn.com/java/java-exception-propagation/

2

जब भी तरीकों ढेर कहा जाता है का निर्माण होता है और एक अपवाद पहले ढेर के ऊपर से और अगर यह फेंक दिया जाता है पकड़ा नहीं जाता है, जब तक यह पकड़ा नहीं जाता है तब तक यह पिछले तरीकों से ढेर नीचे आना शुरू कर देता है। यदि स्टैक के नीचे पहुंचने के बाद भी अपवाद बनी रहती है तो इसे जेवीएम में प्रचारित किया जाता है और प्रोग्राम समाप्त हो जाता है।

अनचेक अपवाद स्वचालित रूप से जावा में प्रचारित होते हैं। कार्यक्रम>

public class ExceptionTest { 
public static void main(String[] args) { 
    method1(); 
    System.out.println("after calling m()"); 
} 

static void method1() { 
    method2(); 
} 

static void method2() { 
    method3(); 
} 

static void method3() { 
    throw new NullPointerException(); 
} 

} 

जांचे हुए अपवादों विधि प्रचार कीवर्ड फेंकता का उपयोग करके अपवाद फेंक चाहिए के लिए। कार्यक्रम>

public class ExceptionTest { 
public static void main(String[] args) 
       throws FileNotFoundException { 
     method1(); 
     System.out.println("after calling m()"); 
} 

static void method1() throws FileNotFoundException{ 
     method2(); 
} 

static void method2() throws FileNotFoundException{ 
     method3(); 
} 

static void method3() throws FileNotFoundException{ 
     throw new FileNotFoundException(); 
} 

} 

अनियंत्रित अपवाद प्रचार (NullPointerException)> Propagating unchecked exception (NullPointerException)

प्रचार अपवाद (FileNotFoundException) का उपयोग कर जाँच की थ्रो कीवर्ड> Propagating checked exception (FileNotFoundException) using throws keyword

से: http://www.javamadesoeasy.com/2015/05/exception-propagation-in-java-deep.html

1

जब एक अपवाद होता है , प्रचार एक ऐसी प्रक्रिया है जिसमें अपवाद ड्रॉप हो रहा है डी से ऊपर तक नीचे तक और कॉलिंग श्रृंखला में कटौती करने के लिए और यदि वहां पकड़ा नहीं जाता है, तो अपवाद फिर से पिछली विधि तक गिर जाता है, और तब तक जब तक यह पकड़ा नहीं जाता है या जब तक यह बहुत नीचे तक नहीं पहुंच जाता कॉल स्टैक का। इसे अपवाद प्रचार कहा जाता है।

उदाहरण के लिए हमारे ढेर मान है:

सी()

ख()

एक()

मुख्य()

एक अपवाद सी में यदि ऐसा होता है () विधि और यदि इसे संभाला नहीं जाता है तो इसे पिछले बी() विधि में प्रचारित किया जाएगा और यदि इसे वहां नहीं संभाला जाता है, तो फिर इसे एक() विधि में प्रचारित किया जाता है जहां अपवाद संभाला जाता है और इसी तरह।

अपवाद को मुख्य() विधि, एक() विधि, बी() विधि या सी() विधि में कॉल स्टैक में किसी भी विधि में संभाला जा सकता है।

थ्रेड

संबंधित मुद्दे