Java में थ्रो करना
आप खुद throw से रुकावट लिखें। Signal.java खोलें और water के किसी भी print से पहले संदेश empty के साथ IllegalArgumentException फेंकें। javac Signal.java से कंपाइल करें और java Signal चलाएँ। प्रोग्राम throw पंक्ति पर रुकता है; water print नहीं होता। दूसरे डेमो में cups को 0 रखें ताकि if में जाए और throw हो। तीसरे में cups 3 रखें ताकि if छूटे और स्क्रीन water print करे। फ़ाइल पढ़ना अगले पृष्ठ के लिए छोड़ें।
आप रुकावट लिखते हैं
पिछले पृष्ठों ने दिखाया कि जब कोई नियम टूटता है तो रुकावट आती है — खराब array इंडेक्स ने ArrayIndexOutOfBoundsException फेंका। यह पृष्ठ उलटी दिशा है। आप exception प्रकार चुनते हैं और जानबूझकर throw लिखते हैं। शिक्षण फ़ाइल Signal.java खोलें। सार्वजनिक क्लास नाम Signal रखें ताकि फ़ाइल नाम से मेल खाए। Guard के बचे catch डेमो, Alarm array रुकावटें, और कोई Scanner या nextLine हटाएँ। प्रोग्राम टाइपिंग का इंतज़ार न करे। इस पृष्ठ को import पंक्ति की ज़रूरत नहीं।
main में, किसी भी शांत सफलता print से पहले throw करें:
throw new IllegalArgumentException("empty");
फिर एक print रखें जो throw चलने पर नहीं चलना चाहिए:
System.out.println("water");
उद्धरणों में शब्द संदेश हैं। प्रकार नाम IllegalArgumentException है। आप शून्य से भाग नहीं कर रहे और slots[5] नहीं पढ़ रहे। रुकावट इसलिए है क्योंकि आपने throw लिखा।
public class Signal {
public static void main(String[] args) {
throw new IllegalArgumentException("empty");
// water would not run after throw
}
}
जिस फ़ोल्डर में Signal.java है वहाँ javac Signal.java चलाएँ। जब कोष्ठक, ब्रेसेज़ और सेमीकोलन मेल खाएँ, javac अपनी पंक्ति नहीं लिखता। फिर java Signal — java Signal.java नहीं। रन कमांड से .java हटाएँ।
रन throw पंक्ति पर रुकता है। टर्मिनल IllegalArgumentException नाम देता है और संदेश empty दिखाता है। उस throw के बाद water print नहीं चलता क्योंकि प्रोग्राम पहले ही रुक चुका। यदि उसी main में throw के बाद अप्राप्य System.out.println("water"); रखें तो कुछ कंपाइलर चेतावनी देते हैं; सिखाने का बिंदु वही है: throw के बाद उस पथ की सामान्य पंक्तियाँ नहीं चलतीं। यदि javac शिकायत करे तो मृत print के बिना नंगा throw फ़ाइल रखें — रुकावट ही पाठ है।
यदि टर्मिनल कीबोर्ड का इंतज़ार करे तो पुराने अभ्यास का nextLine अभी फ़ाइल में है। हटाएँ। blocked फिर after दिखे तो अभी भी Guard catch फ़ाइल चल रही है — java Signal पर जाएँ। slots[5] से ArrayIndexOutOfBoundsException दिखे तो Alarm बचा है; इस पाठ के लिए throw पंक्ति से बदलें।
शून्य cups if में जाता है और throw करता है
दूसरा प्रोग्राम नए सिरे से शुरू होता है। cups को 0 संग्रहीत करें। यदि cups 1 से छोटा हो तो वही IllegalArgumentException संदेश empty के साथ फेंकें। if के बाद water print रखें।
public class Signal {
public static void main(String[] args) {
int cups = 0;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
javac Signal.java से कंपाइल करें, फिर java Signal चलाएँ। शून्य एक से छोटा है, इसलिए if में जाता है और throw चलता है। स्क्रीन वही रुकावट दिखाती है: IllegalArgumentException और empty। water शब्द print नहीं होता। इस पृष्ठ पर कोई catch नहीं, प्रोग्राम वहीं समाप्त — जानबूझकर; पिछला पृष्ठ catch का अभ्यास था, यह throw लिखना।
ब्रेसेज़ एक बार देखें। throw पंक्ति if ब्लॉक के अंदर है। water print if के बाहर। throw चलते ही प्रोग्राम रुक चुका होता है, water कभी नहीं पहुँचता। इंडेंट और ब्रेसेज़ throw को जाँच के अंदर रखते हैं।
तीन cups throw छोड़कर water print करते हैं
तीसरा प्रोग्राम भी नए सिरे से। cups को 3 सेट करें। वही if, वही throw, वही water print रखें।
public class Signal {
public static void main(String[] args) {
int cups = 3;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
फिर javac Signal.java और java Signal से कंपाइल और चलाएँ। तीन एक से छोटा नहीं, इसलिए if में नहीं जाता। throw कभी नहीं चलता। स्क्रीन water print करती है। कोई रुकावट नहीं। यह विरोध नियंत्रण बिंदु है: throw तभी चलता है जब शर्त कहे मान मान्य नहीं।
इस पृष्ठ पर इन शिक्षण फ़ाइलों पर catch न बनाएँ। Guard पर catch का अभ्यास हो चुका। यहाँ अपनी लिखी रुकावट और throw छोड़ने वाला पथ देखें। खाली cups के लिए IllegalArgumentException को ArrayIndexOutOfBoundsException से न बदलें — वह नाम खराब array इंडेक्स का था, throw से आपके मान जाँच का नहीं।
जो नाम आपने लिखा
जो प्रकार आपने फेंका वह IllegalArgumentException है, ArrayIndexOutOfBoundsException नहीं और नंगा empty प्रकार नहीं। संदेश empty वह है जो आप नाम के बगल दिखाना चाहते थे। बाद में पकड़ें तो catch खंड में IllegalArgumentException होना चाहिए। NullPointerException का catch इसे नहीं संभालेगा। आज इन Signal फ़ाइलों पर वह catch अभ्यास ज़रूरी नहीं।
IllegalArgumentException शुरुआती उपयोग में रन-टाइम exception है, इसलिए इन छोटे main डेमो को main पर throws खंड की ज़रूरत नहीं। इस एक स्पष्ट प्रकार और संदेश पर रहें। अगले पृष्ठ के फ़ाइल खोलने से पहले हर throwable वर्ग की सूची ज़रूरी नहीं।
Guard पर catch से तुलना
try-catch पृष्ठ पर java Guard ने खराब इंडेक्स संभाला और after तक चला। इस पृष्ठ पर java Signal जानबूझकर रुकावट बनाता है और नहीं पकड़ता। array कहानी इतिहास है। Guard फ़ाइलें पास हों तो पुराने डेमो के रूप में रखें; throw डेमो के लिए java Signal चलाएँ ताकि स्क्रीन इस पाठ से मेल खाए।
यह पृष्ठ files के लिए क्या छोड़ता है
यह पृष्ठ केवल दिखाता है कि आप throw से रुकावट बनाते हैं। अगला पृष्ठ फ़ाइल पढ़ना शुरू करता है। रुकावट लिखने और cups उपयोगी होने पर छोड़ने पर रहें। अभी इन Signal डेमो पर फ़ाइल खोलना अनिवार्य न बनाएँ।
files से पहले
आप IllegalArgumentException("empty") फेंक सकते हैं और देख सकते हैं कि रन water से पहले रुकता है। cups 0 पर if में जाता है और वही रुकावट। cups 3 पर throw नहीं चलता और स्क्रीन water print करती है। Signal.java कंपाइल करें और हर रखे डेमो के लिए बारी-बारी java Signal चलाएँ। इस रुकावट का नाम IllegalArgumentException है। अगला पृष्ठ फ़ाइल पढ़ना है।
स्पष्ट रुकावट के लिए नंगा throw रखें। throw छोड़ सकने वाली शर्त के लिए cups जोड़ी रखें। फ़ाइल पढ़ना इस पृष्ठ से दूर रखें। ये तीन आदतें आगे बढ़ने से पहले नियंत्रण हैं। जब water केवल cups-तीन वाले java Signal रन पर दिखे, throwing ने इस पाठ का काम कर लिया और आप फ़ाइलों वाले अगले विषय के लिए तैयार हैं।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी