一、Switch枚举简介
Switch枚举是Java中一种特殊的控制语句,用于根据一个枚举类型的变量的值来选择执行相应的代码块。它是一种在多个if-else语句中较有效的语句,代码清晰易读。
二、Switch枚举基本语法
enum Season { SPRING, SUMMER, AUTUMN, WINTER; } public class Main { public static void main(String[] args) { Season season = Season.SPRING; switch (season) { case SPRING: System.out.println("春天"); break; case SUMMER: System.out.println("夏天"); break; case AUTUMN: System.out.println("秋天"); break; case WINTER: System.out.println("冬天"); break; default: System.out.println("季节输入有误!"); } } }
解释:
首先定义了一个Season枚举类型,其中包含四个常量:SPRING,SUMMER,AUTUMN,WINTER。
在主方法中,定义了一个season变量并赋值为Season.SPRING。接着,使用Switch语句对变量进行判断,根据变量的值选择执行相应的代码块。此处输出"春天"。
当变量的值不在枚举常量范围内时,Switch语句会执行default中的代码块。
三、Switch枚举中的Fall-Through效应
Switch语句在执行时,如果没有break语句,将继续向下执行,直到遇到break语句或者Switch语句结束。这种效应被称为"Fall-Through",有时候也可被使用,但是需要小心。
enum Status { OK, WARNING, CRITICAL; } public class Main { public static void main(String[] args) { Status status = Status.WARNING; switch (status) { case OK: System.out.println("OK"); case WARNING: System.out.println("WARNING"); case CRITICAL: System.out.println("CRITICAL"); default: System.out.println("STATUS UNKNOWN"); } } }
解释:
定义了一个Status枚举类型,其中包含三个常量:OK,WARNING,CRITICAL。
在主方法中,定义了一个status变量并赋值为Status.WARNING。接着,使用Switch语句对变量进行判断,根据变量的值选择执行相应的代码块。
由于没有break语句,程序将沿着Switch语句向下走。输出内容为:
WARNING CRITICAL STATUS UNKNOWN
四、Switch枚举展开
在JDK 7中,Java允许开发者使用Switch语句对枚举类型进行展开,简化代码。
常规实现方式:
enum Direction { EAST, SOUTH, WEST, NORTH } public class Main { public static void direction(Direction direction) { switch (direction) { case EAST: System.out.println("东"); break; case SOUTH: System.out.println("南"); break; case WEST: System.out.println("西"); break; case NORTH: System.out.println("北"); break; default: System.out.println("方向输入有误!"); } } public static void main(String[] args) { Main.direction(Direction.EAST); } }
展开实现方式:
enum Direction { EAST { public void show() { System.out.println("东"); } }, SOUTH { public void show() { System.out.println("南"); } }, WEST { public void show() { System.out.println("西"); } }, NORTH { public void show() { System.out.println("北"); } }; public abstract void show(); } public class Main { public static void main(String[] args) { Direction.EAST.show(); } }
解释:
定义一个Direction枚举类型,其中包含四个常量:EAST,SOUTH,WEST,NORTH。
在常规实现方式中,实现了一个方向方法,使用Switch语句进行变量判断。在展开实现方式中,直接在Enum常量上定义show抽象方法,极大地简化了代码。
五、Switch枚举中使用Interface
Java允许使用interface代替abstract类,方便在枚举中使用多态。
interface Food { void show(); } enum Fruit implements Food { APPLE, BANANA, ORANGE; public void show() { System.out.println(this.name()); } } public class Main { public static void main(String[] args) { Fruit.APPLE.show(); } }
解释:
定义一个Food接口,在Fruit枚举类型中使用implements关键字代替abstract类。在枚举常量上实现show方法。
由于接口的多态性,使用enum可以轻松实现多种类型使用同一接口的效果。
六、总结
Switch枚举是Java中一种特殊的控制语句,使用极为灵活。需要小心Fall-Through效应,方便随时在枚举中添加、删除、修改常规数据类型。Switch语句可以简化代码,使得代码清晰易读;展开实现方式更可以减少代码量。