Exceptionसभी अपवादों के लिए आधार प्रकार है, और इस तरह के बहुत ही अनिर्दिष्ट। आपको कभी भी इस अपवाद को नहीं फेंकना चाहिए क्योंकि इसमें कोई उपयोगी जानकारी नहीं है। अपवादों को पकड़ने वाले कोड को कॉल करना जानबूझकर (आपके तर्क से) अपवाद को अन्य सिस्टम अपवादों से अलग नहीं किया जा सकता है जो पूरी तरह से अवांछित हैं और वास्तविक दोषों को इंगित करते हैं।
यही कारण लागू भी होता है SystemException। यदि आप व्युत्पन्न प्रकारों की सूची को देखते हैं, तो आप बहुत भिन्न अर्थों के साथ अन्य अपवादों की एक बड़ी संख्या देख सकते हैं।
NullReferenceExceptionऔर IndexOutOfRangeExceptionएक अलग तरह के हैं। अब ये बहुत विशिष्ट अपवाद हैं, इसलिए इन्हें फेंकना ठीक हो सकता है। हालाँकि, आप अभी भी इन्हें फेंकना नहीं चाहेंगे, क्योंकि उनका आमतौर पर मतलब होता है कि आपके तर्क में कुछ वास्तविक गलतियाँ हैं। उदाहरण के लिए अशक्त संदर्भ अपवाद का अर्थ है कि आप किसी वस्तु के सदस्य तक पहुँचने का प्रयास कर रहे हैं null। यदि आपके कोड में यह संभावना है, तो आपको हमेशा स्पष्ट रूप से जांच करनी चाहिए nullऔर इसके बजाय एक अधिक उपयोगी अपवाद फेंकना चाहिए (उदाहरण के लिए ArgumentNullException)। इसी तरह, IndexOutOfRangeExceptionतब होता है जब आप एक अमान्य सूचकांक (सरणियों पर - सूचियों पर नहीं) तक पहुँचते हैं। आपको हमेशा यह सुनिश्चित करना चाहिए कि आप पहली बार में ऐसा न करें और पहले एक सरणी जैसे उदाहरण की सीमाओं की जांच करें।
उदाहरण के लिए उन दो जैसे कुछ अन्य अपवाद हैं, InvalidCastExceptionया DivideByZeroExceptionजो आपके कोड में विशिष्ट दोषों के लिए फेंके गए हैं और आमतौर पर इसका मतलब है कि आप कुछ गलत कर रहे हैं या आप पहले कुछ अमान्य मूल्यों की जाँच नहीं कर रहे हैं। अपने कोड से उन्हें जानबूझकर फेंकने से, आप कॉलिंग कोड के लिए यह निर्धारित करना कठिन बना रहे हैं कि क्या कोड में कुछ खराबी के कारण उन्हें फेंक दिया गया था, या सिर्फ इसलिए कि आपने उन्हें अपने कार्यान्वयन में किसी चीज़ के लिए पुन: उपयोग करने का निर्णय लिया।
बेशक, इन नियमों के कुछ अपवाद (हाह) हैं। यदि आप कुछ ऐसा निर्माण कर रहे हैं जो एक अपवाद का कारण बन सकता है जो वास्तव में एक मौजूदा से मेल खाता है, तो इसका उपयोग करने के लिए स्वतंत्र महसूस करें, खासकर यदि आप कुछ अंतर्निहित व्यवहार से मेल खाने की कोशिश कर रहे हैं। बस सुनिश्चित करें कि आप तब एक बहुत विशिष्ट अपवाद प्रकार चुनें।
सामान्य तौर पर, जब तक आपको एक (विशिष्ट) अपवाद नहीं मिलता है जो आपकी आवश्यकता को पूरा करता है, आपको हमेशा विशिष्ट अपेक्षित अपवादों के लिए अपने स्वयं के अपवाद प्रकार बनाने पर विचार करना चाहिए। खासकर जब आप लाइब्रेरी कोड लिख रहे हों, तो अपवाद स्रोतों को अलग करने के लिए यह बहुत उपयोगी हो सकता है।