当前位置:   article > 正文

Day006--java中的枚举类,switch结构语句及if语句_java switch 枚举

java switch 枚举

目录

 一,枚举类型的概述

 二,内部枚举类型

三,枚举类中的常用方法 

 四,枚举类型中的构造方法

五,if选择语句 

1, 单分支:if{}语句,只会执行它里面的语句,只能判断一次。

 2,双分支:if{}else{}语句,它比if{}语句多了个else语句判断

3,多分支:if{}else if{}else,可以进行很多个判断。

 4,condition ? true:false

 六,switch语句


一,枚举类型的概述

在我们的生活中,有些事物的属性就只能取到少数有限的数据(该数据的值只有一种或固定的几种)。比方说:当有人问我们,今天星期几时,我们只可能会说星期一到星期天之间的数据,不可能会出现星期八这个数据值。在我们的java中,如果分配了意外的值,并不会产生语法错误,程序会继续运行难以被察觉。所以要想对类似这样的对象进行表达,就需要一种类----枚举类型

 枚举类和我们常写的类很相似,也有方法和字段

声明枚举类型时指定枚举对象,不允许显式的构造对象(即我们在声明枚举时的就已经将对象指定好了)----枚举类型里面的枚举类型成员是枚举类型的实例

下面,我们使用enum来进行声明一个枚举类

 从上面我们可以看到,枚举类的名称为Enum01,访问类型为public(公有访问),且只能取的值在MONDAY~SUNDAY这七个值之间,表示一周里的七天,且这些枚举类型的值(对象)通常采用全部字母大写来进行命名。

1,因为枚举类型成员都是默认使用final,static,public所修饰的,所以当我们使用枚举类型成员时,直接使用枚举类型名称调用枚举类型成员即可。

例:Enum01 w1=Enum01.MONDAY;

2,枚举可以赋空值。

例:Enum01 w1=null;

3,枚举可以声明数组

例:Enum01 []={Enum01.MONDAY,Enum01.TURSDAY,Enum01.WEDNESDAY....,Enum01.SUNDAY};

枚举类型是在J2SE5.0(JDK5)中新增的,可以取代以往将常量放置在接口中的定义常量的方式。因为枚举类型成员都是默认使用final,static,public所修饰的,所以我们可以不用写上这三个关键字来进行修饰,会更加方便省时。

除了上面的优点外,枚举类型还有一些其他的优点,比方说在使用枚举类型时可以“参数类型检测

 如下,在我们向接口中传入接口没有的常量参数时,即使不接受在接口中定义的常量编译器也不会有报错提醒的,而如果是往枚举类中传入枚举没有的常量参数时,编译器就会向我们报错,这样子我们就不会去使用类中没有的参数,省去了后期找这个错误的时间。

  1. import static java.lang.System.out; //因为System类是final类,使用的是static修饰的,导入时要使用static关键字
  2. interface IMyInterface{
  3. public static final String S1="A";
  4. public static final String S2="B";
  5. public static final String S3="C";
  6. }
  7. public class MeiJu {
  8. enum Week{ //内部类
  9. MONDAY, //枚举类类型成员(枚举类型的实例)
  10. TUESDAY,
  11. WEDNESDAY,
  12. THURSDAY,
  13. FRIDAY,
  14. SATURDAT,
  15. SUNDAY
  16. }
  17. //设置两个方法来对枚举类型成员进行调用
  18. public static void deployI(String s) {
  19. switch(s) {
  20. case IMyInterface.S1:
  21. System.out.println(IMyInterface.S1);
  22. break;
  23. case IMyInterface.S2:
  24. System.out.println(IMyInterface.S2);
  25. break;
  26. case IMyInterface.S3:
  27. System.out.println(IMyInterface.S3);
  28. break;
  29. }
  30. }
  31. public static void deployM(Week w) {
  32. switch(w) {
  33. case MONDAY:
  34. System.out.println("星期一");
  35. break;
  36. case TUESDAY:
  37. System.out.println("星期二");
  38. break;
  39. case WEDNESDAY:
  40. System.out.println("星期三");
  41. break;
  42. case THURSDAY:
  43. System.out.println("星期四");
  44. break;
  45. case FRIDAY:
  46. System.out.println("星期五");
  47. break;
  48. }
  49. }
  50. public static void main(String[] args) {
  51. deployI(IMyInterface.S1); //使用接口中的常量
  52. deployI("我是不存在的(*^▽^*)"); //传入接口中没有的字符串常量
  53. deployM(Week.MONDAY); //使用枚举中的常量
  54. deployM("我是不存在的(*^▽^*)") ; //无法传入枚举中没有的常量参数
  55. }

 二,内部枚举类型

 枚举类型的定义还有另外一种形式:内部类

就是在一个类里面进行声明我们枚举类型。如下:week类定义在MeiJu类中。

三,枚举类中的常用方法 

 枚举类型常用的方法如下:

  • 将枚举类型成员以数组的形式返回:values()
  • 实现将普通字符串转换为枚举实例:valueOf()
  • 比较两个枚举对象在定义时的顺序:compareTo()
  • 得到枚举成员的位置索引:ordinal()

  1. import static java.lang.System.out; //因为System类是final类,使用的是static修饰的,导入时要使用static关键字
  2. public class MeiJu {
  3. enum Week{ //内部类
  4. MONDAY, //枚举类类型成员(枚举类型的实例)
  5. TUESDAY,
  6. WEDENSDAY,
  7. THURSDAY,
  8. FRIDAY,
  9. SATURDAT,
  10. SUNDAY
  11. }
  12. public static void comparision(Week w) {
  13. for(int i=0;i<Week.values().length;i++) {
  14. out.printf("%s与%s使用compareTo方法对比后的结果为:%s\n\t",w,Week.values()[i],w.compareTo(Week.values()[i]));
  15. }} //compareTo方法公式:前面索引-后面索引
  16. public static void getOffset() {
  17. for(int i=0;i<Week.values().length;i++) {
  18. out.printf("%s在枚举类中的索引位置为:%s\n\t", Week.values()[i],Week.values()[i].ordinal());
  19. } //输出枚举对象在枚举类中的索引的位置
  20. }
  21. public static void main(String[] args) {
  22. comparision(Week.valueOf("MONDAY"));
  23. out.println();
  24. getOffset();
  25. }
  26. }

 四,枚举类型中的构造方法

在枚举类中使用构造方法,使枚举类可以创建出字符串类型的对象。但是规定了这个构造方法必须为private修饰符所修饰的。如下

以上是对一周的枚举类的说明,接下来我们为了方便,创建一个含有时HOUR,分MINUTE,秒SENTENCE三个对象的枚举类Day,然后再给里面的枚举值进行赋值,接下来进行获取枚举值,中文值,枚举值比较,获取枚举序号等操作。 

  1. package com.enumeration;
  2. public enum Day {
  3. HOUR("时"),MINUTE("分"),SENTENCE("秒");
  4. String chineseName;
  5. Day(String chineseName){
  6. this.chineseName=chineseName;
  7. }
  8. public String getChineseName() {
  9. return this.chineseName;
  10. }
  11. public static void main(String[] args) {
  12. //获取枚举值的名称
  13. String name=Day.HOUR.toString();
  14. Day value=Day.HOUR.valueOf(name);
  15. System.out.printf("HOUR的名称为%s\n枚举的值为:%s\n",name,value);
  16. System.out.printf("SENTENCE的序号为:%d\n",Day.SENTENCE.ordinal());
  17. Day[] shuju=Day.values();
  18. System.out.printf("Day所有可取值为:%s\n",shuju);
  19. System.out.printf("MINUTE减去HOUR的序号结果为:%d\n",Day.MINUTE.compareTo(Day.HOUR));
  20. for(Day days:Day.values()) {
  21. System.out.printf("枚举的中文值为:%s---------------------枚举的英文值为:%s\n",days.getChineseName(),days.name());
  22. }
  23. }
  24. }

 在使用枚举类型时,会遇到根据不同的枚举元素完成不同的操作的情况,这就涉及到了如何选择枚举类型。可以使用switch语句来进行选择选择。如下案例:

选择合适的枚举元素,并将选择到的元素输出到e盘的文件中

  1. import java.io.*;
  2. public class IOTest {
  3. enum MyEnum{ //枚举内部类
  4. DRIVER,URL,USERNAME,USERPASS; //枚举类型成员(枚举实例)
  5. public static String getInfo(MyEnum e) { //创建一个方法来获取对象对应的值
  6. switch(e) { //根据不同的枚举对象做不同的操作
  7. case DRIVER:
  8. return "com.mysql";
  9. case URL:
  10. return "https://www.baidu.com";
  11. case USERNAME:
  12. return "mr";
  13. case USERPASS:
  14. return "123456";
  15. default:
  16. return null; //方法返回的String值
  17. }
  18. }
  19. }
  20. public static void main(String[] args) throws IOException {
  21. for(MyEnum m:MyEnum.values()) { //将枚举类型转换为数组进行遍历
  22. File file=new File("e:\\myInofEnum.txt"); //创建文件对象
  23. FileWriter fw=new FileWriter(file,true); //不覆盖写入
  24. BufferedWriter bw=new BufferedWriter(fw); //使用包装类进行输出数据
  25. String b=m+":"+m.getInfo(m); //将遍历到的数据放入字符串中
  26. bw.write(b); //包装流写入字符串的数据
  27. bw.newLine(); //包装流每写入一行数据就换一行
  28. bw.close(); //一定要关闭输出流,不然数据写入不成功
  29. }
  30. System.out.println("程序结束,请到桌面去查看文件"); //e盘是我的桌面,可以自己写文件的位置
  31. }
  32. }

关于I/Ol流文件读取的内容,有兴趣的可以点击Day014--java中的I/O流跳转进行阅读。 

可以使用枚举类型来进行遍历我们的泛型集合

  1. import java.util.*;
  2. public class VactorTest {
  3. //使用枚举接口遍历集合元素
  4. public static void main(String[] args) {
  5. Vector<Integer> v=new Vector<Integer>(); //创建vector对象
  6. for(int i=0;i<5;i++) {
  7. v.add(i);
  8. }
  9. Enumeration<Integer> e=v.elements(); //将vector对象转换成枚举接口类型
  10. while(e.hasMoreElements()) { //输出枚举接口中的全部元素
  11. System.out.println(e.nextElement());
  12. }
  13. }
  14. }

五,if选择语句 

if选择结构语句也叫条件结构语句-----需要对一些条件作出判断,从而决定执行哪一段代码。

if条件语句有三个:1,if{};2,if{}else{};3,if{}else if{}else

其使用分别如下:

1, 单分支:if{}语句,只会执行它里面的语句,只能判断一次。

 2,双分支:if{}else{}语句,它比if{}语句多了个else语句判断

当if{}里面的条件不符时,就去执行else{}语句。如下代码为:实现判断输入的年份是否是个普通闰年的功能【普通闰年:只能被4整除,但不能被100整除】

3,多分支:if{}else if{}else,可以进行很多个判断。

 4,condition ? true:false

在java中if{}else{}语句也可以用三元运算符来替代,依旧是判断输入的年份是否是个普通闰年如下:

 六,switch语句

 至此,if语句就讲完了,接下来让我们继续往下面看-----switch语句。

 以上是个普通的switch语句,对于switch语句来说,每一个case选择语句后面都要带上break关键字,来跳出整个switch语句。并且,如果是只有一行输出语句的话,case后面的语句花括号可以省略

 如下:

【值得注意的是:】

switch的控制表达式不能是bolean类型,只能是byte,short,int,char,enum及String类型

在switch语句中表达式是一个已经定义好且赋值过的变量名。

switch语句只适合用于少量常数值的判断

接下来,我们在枚举类里面加入switch语句

 

以上就是枚举类,if选择语句,switch语句的使用,有问题请在评论区留言。 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号