赞
踩
目录
1, 单分支:if{}语句,只会执行它里面的语句,只能判断一次。
2,双分支:if{}else{}语句,它比if{}语句多了个else语句判断
3,多分支:if{}else if{}else,可以进行很多个判断。
在我们的生活中,有些事物的属性就只能取到少数有限的数据(该数据的值只有一种或固定的几种)。比方说:当有人问我们,今天星期几时,我们只可能会说星期一到星期天之间的数据,不可能会出现星期八这个数据值。在我们的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所修饰的,所以我们可以不用写上这三个关键字来进行修饰,会更加方便省时。
除了上面的优点外,枚举类型还有一些其他的优点,比方说在使用枚举类型时可以“参数类型检测”
如下,在我们向接口中传入接口没有的常量参数时,即使不接受在接口中定义的常量编译器也不会有报错提醒的,而如果是往枚举类中传入枚举没有的常量参数时,编译器就会向我们报错,这样子我们就不会去使用类中没有的参数,省去了后期找这个错误的时间。
- import static java.lang.System.out; //因为System类是final类,使用的是static修饰的,导入时要使用static关键字
- interface IMyInterface{
- public static final String S1="A";
- public static final String S2="B";
- public static final String S3="C";
- }
- public class MeiJu {
- enum Week{ //内部类
- MONDAY, //枚举类类型成员(枚举类型的实例)
- TUESDAY,
- WEDNESDAY,
- THURSDAY,
- FRIDAY,
- SATURDAT,
- SUNDAY
- }
- //设置两个方法来对枚举类型成员进行调用
- public static void deployI(String s) {
- switch(s) {
- case IMyInterface.S1:
- System.out.println(IMyInterface.S1);
- break;
- case IMyInterface.S2:
- System.out.println(IMyInterface.S2);
- break;
- case IMyInterface.S3:
- System.out.println(IMyInterface.S3);
- break;
- }
- }
- public static void deployM(Week w) {
- switch(w) {
- case MONDAY:
- System.out.println("星期一");
- break;
- case TUESDAY:
- System.out.println("星期二");
- break;
- case WEDNESDAY:
- System.out.println("星期三");
- break;
- case THURSDAY:
- System.out.println("星期四");
- break;
- case FRIDAY:
- System.out.println("星期五");
- break;
- }
- }
- public static void main(String[] args) {
- deployI(IMyInterface.S1); //使用接口中的常量
- deployI("我是不存在的(*^▽^*)"); //传入接口中没有的字符串常量
-
- deployM(Week.MONDAY); //使用枚举中的常量
- deployM("我是不存在的(*^▽^*)") ; //无法传入枚举中没有的常量参数
-
- }
枚举类型的定义还有另外一种形式:内部类
就是在一个类里面进行声明我们枚举类型。如下:week类定义在MeiJu类中。
枚举类型常用的方法如下:
- import static java.lang.System.out; //因为System类是final类,使用的是static修饰的,导入时要使用static关键字
- public class MeiJu {
- enum Week{ //内部类
- MONDAY, //枚举类类型成员(枚举类型的实例)
- TUESDAY,
- WEDENSDAY,
- THURSDAY,
- FRIDAY,
- SATURDAT,
- SUNDAY
- }
- public static void comparision(Week w) {
- for(int i=0;i<Week.values().length;i++) {
- out.printf("%s与%s使用compareTo方法对比后的结果为:%s\n\t",w,Week.values()[i],w.compareTo(Week.values()[i]));
- }} //compareTo方法公式:前面索引-后面索引
- public static void getOffset() {
- for(int i=0;i<Week.values().length;i++) {
- out.printf("%s在枚举类中的索引位置为:%s\n\t", Week.values()[i],Week.values()[i].ordinal());
- } //输出枚举对象在枚举类中的索引的位置
- }
- public static void main(String[] args) {
- comparision(Week.valueOf("MONDAY"));
- out.println();
- getOffset();
- }
-
- }
在枚举类中使用构造方法,使枚举类可以创建出字符串类型的对象。但是规定了这个构造方法必须为private修饰符所修饰的。如下
以上是对一周的枚举类的说明,接下来我们为了方便,创建一个含有时HOUR,分MINUTE,秒SENTENCE三个对象的枚举类Day,然后再给里面的枚举值进行赋值,接下来进行获取枚举值,中文值,枚举值比较,获取枚举序号等操作。
- package com.enumeration;
-
- public enum Day {
- HOUR("时"),MINUTE("分"),SENTENCE("秒");
- String chineseName;
- Day(String chineseName){
- this.chineseName=chineseName;
- }
-
- public String getChineseName() {
- return this.chineseName;
- }
-
-
- public static void main(String[] args) {
- //获取枚举值的名称
- String name=Day.HOUR.toString();
- Day value=Day.HOUR.valueOf(name);
- System.out.printf("HOUR的名称为%s\n枚举的值为:%s\n",name,value);
- System.out.printf("SENTENCE的序号为:%d\n",Day.SENTENCE.ordinal());
-
- Day[] shuju=Day.values();
- System.out.printf("Day所有可取值为:%s\n",shuju);
- System.out.printf("MINUTE减去HOUR的序号结果为:%d\n",Day.MINUTE.compareTo(Day.HOUR));
-
- for(Day days:Day.values()) {
- System.out.printf("枚举的中文值为:%s---------------------枚举的英文值为:%s\n",days.getChineseName(),days.name());
- }
- }
- }
在使用枚举类型时,会遇到根据不同的枚举元素完成不同的操作的情况,这就涉及到了如何选择枚举类型。可以使用switch语句来进行选择选择。如下案例:
选择合适的枚举元素,并将选择到的元素输出到e盘的文件中
- import java.io.*;
- public class IOTest {
- enum MyEnum{ //枚举内部类
- DRIVER,URL,USERNAME,USERPASS; //枚举类型成员(枚举实例)
- public static String getInfo(MyEnum e) { //创建一个方法来获取对象对应的值
- switch(e) { //根据不同的枚举对象做不同的操作
- case DRIVER:
- return "com.mysql";
- case URL:
- return "https://www.baidu.com";
- case USERNAME:
- return "mr";
- case USERPASS:
- return "123456";
- default:
- return null; //方法返回的String值
- }
- }
- }
- public static void main(String[] args) throws IOException {
- for(MyEnum m:MyEnum.values()) { //将枚举类型转换为数组进行遍历
- File file=new File("e:\\myInofEnum.txt"); //创建文件对象
- FileWriter fw=new FileWriter(file,true); //不覆盖写入
- BufferedWriter bw=new BufferedWriter(fw); //使用包装类进行输出数据
- String b=m+":"+m.getInfo(m); //将遍历到的数据放入字符串中
- bw.write(b); //包装流写入字符串的数据
- bw.newLine(); //包装流每写入一行数据就换一行
- bw.close(); //一定要关闭输出流,不然数据写入不成功
- }
- System.out.println("程序结束,请到桌面去查看文件"); //e盘是我的桌面,可以自己写文件的位置
- }
- }
关于I/Ol流文件读取的内容,有兴趣的可以点击Day014--java中的I/O流跳转进行阅读。
可以使用枚举类型来进行遍历我们的泛型集合
- import java.util.*;
-
- public class VactorTest {
- //使用枚举接口遍历集合元素
- public static void main(String[] args) {
- Vector<Integer> v=new Vector<Integer>(); //创建vector对象
- for(int i=0;i<5;i++) {
- v.add(i);
- }
- Enumeration<Integer> e=v.elements(); //将vector对象转换成枚举接口类型
- while(e.hasMoreElements()) { //输出枚举接口中的全部元素
- System.out.println(e.nextElement());
- }
- }
- }
if选择结构语句也叫条件结构语句-----需要对一些条件作出判断,从而决定执行哪一段代码。
if条件语句有三个:1,if{};2,if{}else{};3,if{}else if{}else
其使用分别如下:
当if{}里面的条件不符时,就去执行else{}语句。如下代码为:实现判断输入的年份是否是个普通闰年的功能【普通闰年:只能被4整除,但不能被100整除】
在java中if{}else{}语句也可以用三元运算符来替代,依旧是判断输入的年份是否是个普通闰年如下:
至此,if语句就讲完了,接下来让我们继续往下面看-----switch语句。
以上是个普通的switch语句,对于switch语句来说,每一个case选择语句后面都要带上break关键字,来跳出整个switch语句。并且,如果是只有一行输出语句的话,case后面的语句花括号可以省略
如下:
【值得注意的是:】
switch的控制表达式不能是bolean类型,只能是byte,short,int,char,enum及String类型
在switch语句中表达式是一个已经定义好且赋值过的变量名。
switch语句只适合用于少量常数值的判断
接下来,我们在枚举类里面加入switch语句
以上就是枚举类,if选择语句,switch语句的使用,有问题请在评论区留言。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。