首先,我们为什么要学习Enum枚举类
我们引入一段代码:
package com.lbj.javase.enumTest;public class EnumTest01 {public static void main(String[] args) {int retValue=divide(10,2);System.out.println(retValue);int retValue2=divide(10,0);System.out.println(retValue2);}/**** @param a 除数* @param b 被除数* @return 如果返回值是1表成功,是0表失败*/public static int divide(int a,int b){try{int c = a/b;return 1;}catch (Exception e){return 0;}}
}
观察代码我们得知(设计缺陷):
public static int divide(int a,int b){
try{
int c = a/b;
//当我们不小心写成了返回值=10,实际上已经出错了,但是编译器没有检查出来
return 10;
}catch (Exception e){
return 0;
}
}
这段代码中的返回值 return中的数值是1,但是程序猿很容易手贱写多或者写少
提出:
我们追求的是:所有的错误尽可能让编译器找出来,所有的错误越早发现越好
解决:
改进后的代码
(根据需求,我们确定好了是只要返回的两个可以判断执行与不执行,因此我们可以换成布尔类型的数据,这样就不会像上面出现的在编译的时候找不出错误,实际上运行时是错误的程序)
package com.lbj.javase.enumTest;public class EnumTest01 {public static void main(String[] args) {boolean retValue=divide(10,2);System.out.println(retValue);boolean retValue2=divide(10,0);System.out.println(retValue2);}/**** @param a 除数* @param b 被除数* @return 如果返回值是true表成功,是false表失败*/public static boolean divide(int a,int b){try{int c = a/b;return true;}catch (Exception e){return false;}}
}
思考:
以上第二种的方法设计没有什么问题,返回true和false表示两种情况,但是在以后的开发中,有可能遇到一个方法的返回执行结果包括3种情况,4种情况,5种情况不等。
但是每一个都是可以数清楚的,一枚接着一枚都是可以列举出来的,这时候布尔类型就无法满足需求了,此时就需要使用到枚举类型
关于枚举的代码演示:
注意:此时的返回值类型已经变成枚举型的类名,这就是和上面失败的int类型返回值的一个对比
package com.lbj.javase.enumTest;public class EnumTest02 {public static void main(String[] args) {Result result=divide(10,2);System.out.println(result);}public static Result divide(int a, int b){try{int c=a/b;return Result.SUCCESS;}catch (Exception e){return Result.FA;}}
}
//枚举:一枚一枚可以列举出来,才建议使用枚举类型
//枚举编译之后也是生成class文件,因为它也属于引用数据类型
//枚举中的每一个值可以看成是常量
enum Result{//SUCCESS 是枚举Result类型中的一个值//FA 是枚举Result类型中的一个值//枚举中的每一个值都可以看做是常量SUCCESS,FA
}
总结:
1、枚举是一种引用数据类型,由SUN公司以及封装好成为一个类
2、枚举类型怎么定义?语法:
enum 枚举类型名{
枚举值1,枚举值2
}
3、结果只有两种情况的,建议用布尔类型
4、结果超过两种情况且可以一枚一枚列举出来的,建议用枚举类型