Java基础-----Math类相关的API(二)

请添加图片描述

文章目录

  • 1.Enum
    • 1.1 简介
    • 1.2 语法
    • 1.3 相关方法
    • 1.4 详看Enum
  • 2.Timer
  • 3.System

1.Enum

1.1 简介

Enum枚举:就是我们所说的 列举,从给定的值中列举,通常都是有固定值,只能从固定值中去做选择。

比如:商品有入库IN和出库OUT状态;性别有男女之分;一周有周一到周日等等可列举的。

1.2 语法

语法:[修饰符] enum 枚举名{}

比如:商品有入库和出库状态

//商品类
public class Goods {
    private Integer id;//商品的id
    private String name;//商品的名字
    private StatusEnum status;//0:出库状态   1:入库状态

    //构造方法
    //Getter()和Setter()方法
    //toString()方法
}

测试一下:

Goods goods=new Goods(1,"手机",0);

但是这样容易出现用户误操作的情况。我们定义的是0:出库状态 1:入库状态,用户在输
入的时候可能输入2或者3或者其他数字,也就不符合我们定义的初衷了。

那我们如何避免这种情况呢?

我们可以把状态写成IN(入库)或者OUT(出库),这样我们就使用到了枚举Enum。

我们可以创建Enum枚举类。

Java基础-----Math类相关的API(二)_第1张图片

public enum StatusEnum {
    IN,OUT
}

那我们上面那段代码就可以修改成:

Goods goods=new Goods(1,"手机",StatusEnum.IN);

Java基础-----Math类相关的API(二)_第2张图片
这样我们就实现了枚举。

1.3 相关方法

  • values():以数组形式返回枚举类型的所有成员

  • valueOf():将字符串转换成枚举实例

  • ordinal():获取枚举成员的索引

  • compareTo():比较两个枚举成员的在定义时的顺序

枚举类:

public enum StatusEnum {
    IN(1,"入库"),OUT(2,"出库");
    private String name;//状态名称
    private Integer index;//状态索引
    
    StatusEnum(Integer index,String name) {
        this.index=index;
        this.name=name;
    }
}
//values():以数组形式返回枚举类型的所有成员
        StatusEnum[] values = StatusEnum.values();
        for (StatusEnum value : values) {
            System.out.print(value+"\t\t");//IN   OUT
        }
//ordinal()//获取枚举成员的索引位置
        System.out.println(StatusEnum.IN.ordinal());//0
        System.out.println(StatusEnum.OUT.ordinal());//1

注意这里输出的索引位置是0和1,不是我们所定义的IN(1,“入库”),OUT(2,“出库”),注意区分。

//compareTo():比较两个枚举成员的在定义时的顺序
        int i = StatusEnum.IN.compareTo(StatusEnum.OUT);
        System.out.println(i);//-1  因为IN在OUT的前面
        int i1 = StatusEnum.OUT.compareTo(StatusEnum.IN);
        System.out.println(i1);//1
        int i2 = StatusEnum.IN.compareTo(StatusEnum.IN);
        System.out.println(i2);//0

1.4 详看Enum

我们来反编译一下StatusEnum类(javap命令)

t1.StatusEnum> {
  public static final com.coder.enumtest1.StatusEnum IN;
  public static final com.coder.enumtest1.StatusEnum OUT;
  public static com.coder.enumtest1.StatusEnum[] values();
  public static com.coder.enumtest1.StatusEnum valueOf(java.lang.String);
  static {};
}

从上面可以看出:

    1. 所有枚举类型,实际上是继承了java.lang.Enum类
      Java基础-----Math类相关的API(二)_第3张图片
    1. 枚举中定义的实际是常量(都是final 来修饰的)
    1. 枚举在switch中的应用 , 在switch中可以放byte short int char String 枚举类型
//枚举在switch中的应用
        StatusEnum[] values = StatusEnum.values();
        int i= new Random().nextInt(2);
        switch (values[i]){
            case IN:
                System.out.println("入库");
                break;
            case OUT:
                System.out.println("出库");
                break;
        }

2.Timer

类似于我们手机中的闹钟,在定时任务中,我们要用到Timer

Java基础-----Math类相关的API(二)_第4张图片

我们可以看到Timer的schedule()方法中,有这几种参数类型:

Java基础-----Math类相关的API(二)_第5张图片

public class Task extends TimerTask {
    @Override
    public void run() {
        System.out.println("hello China");

    }
}

public class Test {
    public static void main(String[] args) {
        Task task=new Task();
        Timer timer=new Timer();
        timer.schedule(task,1000);//延迟1秒钟
    }
}
public class Test {
    public static void main(String[] args) {
        Task task=new Task();
        Timer timer=new Timer();
        timer.schedule(task,0,1000);//不延迟,间隔时间为1秒钟(也就是每隔1秒钟打印一次hello China)
    }
}

由于这个类我们只使用一次,我们可以考虑把它写成匿名内部类

public class Test {
    public static void main(String[] args) {
        Timer timer=new Timer();
        //写成内部匿名类
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("hello China");
            }
        },0,1000);

    }
}

划重点啦啦啦啦!!!!
Timer只适用于单线程任务。
对于取消该定时器的话,会有一个cancel()方法,但是这个方法需要遇到事件触发它,才可以使用

3.System

java.lang.System系统

方法:

currentTimeMills():获取从1970-01-01  00:00:00到现在的毫秒数

exit():退出java虚拟机   0代表正常退出 ,否则异常退出

getenv(String):获取指定的环境变量

getPropert(String):获取系统属性

getProperties():获取所有系统属性

arraycopy(,源索引,目标,目标索引,长度):从源数组指定索引位置复制给定长度到目标数组的索引位置

gc():执行垃圾回收

你可能感兴趣的:(#,Java基础,java,开发语言)