2013-06-11 10 views
7

मैं जावा में नया हूं और मैं अपवाद हैंडलिंग देख रहा था। जब हम जावा अपवाद को पकड़ने, हम घोषणा करते हैं और यह आरंभ बिना Exception वर्ग का Object उपयोग करते हैं, अर्थातजावा अपवाद वर्ग

catch(NullPointerException e) 
    e.printStackTrace(); 

तो मेरे सवाल है, हम इसे कैसे instantiating बिना वस्तु संदर्भ ई का उपयोग करने में सक्षम हैं?

+0

संकेत: अपवाद ऑब्जेक्ट जिसे आप पकड़ रहे हैं * को उस ब्लॉक के भीतर तत्काल किया गया था जिसने अपवाद को शुरू किया था। – Santa

+0

वही विधि पैरामीटर पर लागू होता है। वे कहीं और बनाए जाते हैं और विधि को भेजे जाते हैं। अपवादों के साथ कोई अलग नहीं, बस एक अलग तंत्र। – EJP

उत्तर

8

वे अच्छी तरह से instantiated कर रहे हैं:

void example() { 
    throw new UnsupportedOperationException("message"); 
}  // ^^^ 

void demonstration() { 
    try { 
     example(); 
    } catch (UnsupportedOperationException e) { 
     e.printStackTrace(); 
    } 
} 

यह आसान उदाहरण सुंदर आत्म व्याख्यात्मक होना चाहिए ...

1

अपवाद (अक्सर) तत्काल होता है जब त्रुटि throw कथन के साथ होती है। उदाहरण के लिए,

throw new NullPointerException(); 

(ध्यान दें कि यह सिर्फ एक उदाहरण है। NPEs आमतौर पर स्पष्ट रूप से अपने खुद के कोड में फेंक दिया नहीं कर रहे हैं।)

catch खंड एक समारोह है कि एक पैरामीटर वाणी के समान है। समारोह

void func(String s) { 
    // ... 
} 

func पर विचार करें s का दृष्टांत नहीं है। String कहीं और बनाया गया है और फ़ंक्शन को पास कर दिया गया है। इसी तरह, हम throw के साथ अपवाद बनाते हैं और यह पैरामीटर की तरह catch खंड प्रकार को "पास" किया जाता है।

0

हाँ, catch(NullPointerException e) में संदर्भ ethrow new NullPointerException("some error message");

का उपयोग कर कोड में फेंक दिया संभावित अपवाद के लिए है
0

अपवाद तत्काल है। यह कक्षा में आंतरिक रूप से होता है जो संभावित रूप से अपवाद फेंक सकता है। आपकी जानकारी के लिए, कीवर्ड फेंक अपवाद बनाने और फेंकने के लिए ज़िम्मेदार है। आपकी पकड़ विधि अपवाद पकड़ लेगा। आप इस कीवर्ड का उपयोग करके अपने स्वयं के अपवाद भी कार्यान्वित कर सकते हैं।

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