switch, break और continue
switch multiple if-else की जगह use होता है जब एक variable की अलग-अलग fixed values check करनी हो — हर case के बाद break लगाना ज़रूरी है, वरना अगला case भी चल जाता है (fall-through)।
break loop को तुरंत रोक देता है। continue current iteration skip करके अगली iteration पर चला जाता है।
switch (day) {
case 1: System.out.println("Mon"); break;
case 2: System.out.println("Tue"); break;
default: System.out.println("Other");
}- switch = एक value के लिए vending machine
- break = loop/switch तुरंत रोक दो
- continue = इस round को skip करो
पुराना switch fall-through के साथ break माँगता है — अगर break भूल गए, control अगले case में भी "गिर" (fall-through) जाता है, चाहे वो match ना करे। ये एक बहुत common bug source रहा है पुराने Java code में।
Java 14+ में नया "arrow syntax" (case X -> ...) आया जो automatically break कर देता है (fall-through नहीं होता — Java designers ने सुनी developers की शिकायतें!), और yield keyword से switch expression से सीधा value भी return कर सकते हो — code छोटा और safer हो जाता है।
| Traditional switch | Modern switch (14+) | |
|---|---|---|
| Fall-through | हाँ (break ज़रूरी) | नहीं (automatic) |
| Value return कर सकता है? | नहीं (statement है) | हाँ (expression है, yield से) |
| Multiple values एक case में | case 1: case 2: | case 1, 2 -> |
// Modern style (Java 14+)
String dayType = switch (day) {
case 1, 7 -> "Weekend";
case 2, 3, 4, 5, 6 -> "Weekday";
default -> "Invalid";
};Java 7+ से switch String पर भी काम करता है (पहले सिर्फ़ int/char/byte/short/enum पर चलता था) — internally ये hashCode() use करके implement होता है। Enum के साथ switch बहुत clean रहता है क्योंकि सारे possible cases पहले से fixed होते हैं, और IDE तुम्हे warn कर सकता है अगर कोई case miss हो गया।
जब nested loops हों और तुम्हे सीधा outer loop से break/continue करना हो (सिर्फ़ inner से नहीं), तब "label" use करते हो — outer loop के पहले एक नाम दे दो (जैसे outer:), और break outer; लिखो। बिना label के, break सिर्फ़ सबसे नज़दीकी (innermost) loop को तोड़ता है।
outer:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (j == 1) continue outer; // seedha outer loop ki agli iteration
System.out.println(i + "," + j);
}
}