अपने विशिष्ट प्रश्न का उत्तर देने के लिए: आपका निर्णय इस बात पर आधारित होना चाहिए कि आपके अपवादों को कैसे और क्यों संसाधित किया जाएगा। क्या आप अपने कार्यक्रम को यथासंभव मूर्खतापूर्ण बनाना चाहते हैं और व्यक्तिगत रूप से हर संभव त्रुटि परिदृश्य पर आसानी से प्रतिक्रिया देना चाहते हैं? फिर आपको वास्तव में हर संभावित त्रुटि के लिए अपवाद वर्ग बनाना चाहिए क्योंकि आप पहचान सकते हैं। अन्यथा, प्रत्येक मामले को व्यक्तिगत रूप से तय करना सबसे अच्छा है।
ऐसी कई सामान्य त्रुटियां हैं जो आपके पूरे कार्यक्रम की स्थिरता को खतरे में डालती हैं (जैसे क्लास नॉटफाउंड अपवाद या NoSuchMethodException) - इन्हें निश्चित रूप से विशेष रूप से संभाला जाना चाहिए। ऐसी अन्य त्रुटियां हैं जो एक दूसरे से निकटता से संबंधित हैं, जिसके परिणामस्वरूप समान समस्याएं हैं - इन्हें श्रेणीबद्ध रूप से समूहीकृत या संगठित किया जा सकता है (IOException इन-आउटपुट से संबंधित सभी प्रकार की त्रुटियों के लिए खड़ा है, NetworkIOException केवल इन-आउटपुट त्रुटियों के लिए है नेटवर्क पहुंच से संबंधित, आदि)।
अपवाद के नाम और वर्ग पदानुक्रम से कहीं अधिक महत्वपूर्ण है, मेरी राय में, आप इसके साथ क्या करते हैं: आप अपना प्रयास/पकड़ ब्लॉक कहां रखते हैं? लॉग फ़ाइल के लिए कौन सी लॉग प्रविष्टियां लिखी जानी चाहिए? अधिसूचित कौन किया जाना चाहिए? व्यवस्थापक/डेवलपर्स को केवल कौन से त्रुटि संदेश प्रस्तुत किए जाने चाहिए? अंतिम उपयोगकर्ता को कौन सी त्रुटियों को सूचित किया जाना चाहिए?
अपवादों को संभालने के लिए कई पैटर्न हैं, इन तरह के सभी प्रकार के सवालों का जवाब देना। आम और उपयोगी पैटर्न का एक व्यापक संग्रह here पाया जा सकता है।
http://weblogs.java.net/blog/bakksjo/archive/2005/09/java_exception.html – drifter