Pure Java – 44 Flow Control – 02
Merhaba Arkadaslar,
Bu bolumde Java’da switch statement/ifadesini inceleyecegiz. switch statement/ifadesini coklu if-else yapisi yerine kullanabiliriz. Oncelikle bildigimiz tarzda basit bir ornek kod gorelim sonrasinda detayli noktalarini inceleyelim.
SwitchTest.java
package purejava44; public class SwitchTest { public static void main(String[] args) { int x = 3; if (x == 1) { System.out.println("x esittir 1"); } else if (x == 2) { System.out.println("x esittir 2"); } else if (x == 3) { System.out.println("x esittir 3"); } else { System.out.println("x hakkinda bilgim yok!"); } switch (x) { case 1: System.out.println("x esittir 1"); break; case 2: System.out.println("x esittir 2"); break; case 3: System.out.println("x esittir 3"); break; default: System.out.println("x hakkinda bilgim yok!"); } } }
switch statement/ifadesinin genel formu
switch (expression) { case constant1: code block case constant2: code block default: code block }
Java 6 da, switch ifadesinin expression kismi char, byte, short , int tipinde ya da bu primitive tiplerin wrapper siniflari olan Character, Byte, Short, Integer tipinde ya da enum olabilir ,fakat long , float, double tipinde ya da bu primitive tiplerin wrapper siniflari olan Long , Float , Double tipinde olamaz. Java 7 de ek olarak String tipinde de olabilir.
Simdi biraz daha detaya inelim ve ozellikle sinav icin bilmemiz gereken noktalara deginelim.
1) case constant/sabiti , compile time/derleme zamani sabiti olmalidir. Ne demek istedigimi kod uzerinde gorelim ;
SwitchTest2.java
public class SwitchTest2 { public static void main(String[] args) { final int a = 1; final int b; b = 2; int c=3; int x = 0; switch (x) { case a: // ok case b: // compiler error //derleme hatasi case c: // compile error //derleme hatasi } } }
dikkat ederseniz b ve c degiskeninin case ifadesinde kullanimi derleme hatasina neden olacaktir, degiskenin final olmasi yeterli olmamakta ancak ve ancak ilk tanimlandigi yerde/declare deger atanmasi gerekmektedir.
2) case constant/sabiti ,switch expression’da kullandigimiz degiskenin tipine uygun deger araliginda olmalidir.
SwitchTest3.java
public class SwitchTest3 { public static void main(String[] args) { byte b=10; switch(b){ case 25: case 100: //case 128: // 128 degeri byte tipinin degeri disindadir. //bu nedenle cast etmek gerekir ya da derleme hatasina neden olur case (byte)128: } } }
3)case ifadesinde birden fazla ayni deger kullanilamaz.
byte b=10; switch(b){ case 25: case 100: //derleme hatasi case 100; //derleme hatasi }
4) Wrapper sinif tipinde expression kullanabiliriz.
switch(new Integer(4)) { case 4: System.out.println("boxing is OK"); }
5) switch-case yapisi icin dikkat etmemiz bir kac yazim kurali bulunmaktadir. Su kod orneklerini inceleyelim ;
switch(x) { case 0 { // case expression'dan sonra iki nokta(:) gerekli. int y = 7; } } switch(x) { 0: { } //case ifadesi eksik ! 1: { } //case ifadesi eksik ! }
break & fall-through
switch-case yapisinda break statement/ifadesi secimliktir.
case constant/sabitleri kontrolu yukaridan asagida dogru olmaktadir, eger break kullanmazsak ilk eslesen case constant/sabitinden itibaren asagiya dogru devam etmektedir.
SwitchTest4.java
enum Color { red, green, blue } public class SwitchTest4 { public static void main(String[] args) { Color c = Color.green; switch (c) { case red: System.out.print("red "); case green: System.out.print("green "); case blue: System.out.print("blue "); default: System.out.println("done"); } int x = 1; switch(x) { case 1: System.out.println("x is one"); case 2: System.out.println("x is two"); case 3: System.out.println("x is three"); } } }
green degeri icin eslesme oldugu icin green blue done olarak cikti olacaktir. Benzer sekilde x=1 degeri icin 3 case ifadesi de calisacaktir. Bu yapiya fall-through denilmektedir.
break kullandigimiz da ise ilgili sart saglandiktan sonra switch-case yapisindan cikilacaktir.
int x = 1; switch(x) { case 1: { System.out.println("x is one"); break; } case 2: { System.out.println("x is two"); break; } case 3: { System.out.println("x is two"); break; } }
default keyword
Java’da default anahtar kelimedir/keyword ve switch-case yapisinda istege bagli olarak kullanilabilir.
SwitchTest5.java
public class SwitchTest5 { public static void main(String[] args) { int x = 7; switch (x) { case 2: case 4: case 6: case 8: case 10: { System.out.println("x cift sayidir"); break; } default: System.out.println("x tek sayidir"); } } }
default anahtar kelimesi switch-case yapisinda en sona gelmek zorunda degildir. Birinci switch ifadesinde x=2 icin ilk sart saglandiktan sonra sirasiyla case’ler calisacaktir. Ikinci switch ifadesinde x=7 oldugu icin default calisacaktir ve yukaridan asagiya dogru fall-through gerceklesecektir. Yani fall-through kuralimiz default icin de gecerlidir.
public class SwitchTest6 { public static void main(String[] args) { int x = 2; switch (x) { case 2: System.out.println("2"); default: System.out.println("default"); case 3: System.out.println("3"); case 4: System.out.println("4"); } System.out.println("Test 2"); x = 7; switch (x) { case 2: System.out.println("2"); default: System.out.println("default"); case 3: System.out.println("3"); case 4: System.out.println("4"); } } }
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
injavawetrust
Leave a Reply