Java进阶第五章——常用类:日期、数字、枚举

1.日期类

  • 在Java.util中有一个工具类,可以获取系统当前时间且精确到毫秒。
Date nowTime = new Date();
  • java.util.Date类的toString()方法已经被重写。
  • 在java.text中SimpleDateFormat()专门负责日期格式化。
//使用Date转化为String,用SimpleDateFormat中的format()方法
public class DateTest {
    public static void main(String[] args) {
        //获取系统时间,精确到毫秒的系统当前时间
        Date nowTime = new Date();
        //java.util.Date类的toString()方法已经被重写了
        System.out.println(nowTime);  //Tue Dec 05 09:06:55 CST 2023

        /*
        * yyyy 年(年是4位)
        * MM 月(月是2位)
        * dd 日
        * HH 时
        * mm 分
        * ss 秒
        * SSS毫秒(毫秒3位,1000毫秒代表1秒)
        * */

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//最完美的格式
//        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String nowTimeStr = sdf.format(nowTime);
        System.out.println(nowTimeStr);  //2023-12-05 09:06:55 290
    }
}
  • 将String转化为Date类型,用SimpleDateFormat中的parse()方法
public class DateTest {
    public static void main(String[] args) throws Exception {
        //假设有一个日期字符串String,怎么转化成Date类型。
        String time = "2023-12-5 09:10:00 111";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//格式要跟String格式一样
        Date dateTime = sdf.parse(time);
        System.out.println(dateTime);  //Tue Dec 05 09:10:00 CST 2023
        
        //如果格式与String的格式不一样会产生解析异常:java.text.ParseException
        //SimpleDateFormat sdf2 = new SimpleDateFormat("MM-dd HH:mm:ss SSS");
    }
}
  • System中有个currentTimeMillis()方法,可以获取1970年1月1日 00:00:00 000到当前系统时间的总毫秒数。
public class DateTest02 {
    public static void main(String[] args) {
        //获取1970年1月1日 00:00:00 000到当前系统时间的总毫秒数
        long nowTimeMillis = System.currentTimeMillis();
        System.out.println(nowTimeMillis);

        //统计一个方法耗时
        //调用目标方法之前记录一个毫秒数
        long begin = System.currentTimeMillis();
        print();
        long end = System.currentTimeMillis();
        System.out.println("耗费时长" + (end-begin) +"毫秒");//耗费时长49毫秒
        //java虚拟机每次调用快慢都不一样
    }

    private static void print() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("i=" + i);
        }
    }
}
  • 对System类的相关属性做个小结:

    System.out:out是System类的静态变量

    System.out.println():println()方法不是System类的,是PrintStream类的方法。

    System.gc():建议启动垃圾回收器

    System.currentTimeMillis():获取1970年1月1日 00:00:00 000到当前系统时间的总毫秒数

    System.exit(0):退出JVM

  • 获取昨天此时的时间

public class DateTest {
    public static void main(String[] args) {

        //默认时间1970-01-01 00:00:00 001 GMT
        //Date time = new Date();  无参表示获取当前系统时间
        Date time = new Date(1);//表示默认时间+1毫秒
        //由于有时差,所以GMT输出打印为CST加八个小时
        System.out.println(time); //Thu Jan 01 08:00:00 CST 1970

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String strTime = sdf.format(time); //1970-01-01 08:00:00 001

        System.out.println(strTime); //Thu Jan 01 08:00:00 CST 1970

        //获取昨天的时间,用System.currentTimeMillis()方法减掉一天时间的毫秒数
        Date time2 = new Date(System.currentTimeMillis() - 1000*60*60*24);
        String strTime2 = sdf.format(time2);
        System.out.println(strTime2);  //2023-12-04 09:56:08 154

    }
}

2.数字类

  • 数字格式化,在java.text中的DecimalFormat能够进行数字格式化,与SimpleDateFormat使用相似。
public class DecimalFormatTest {
    public static void main(String[] args) {
        //关于数字格式化
        DecimalFormat df =new DecimalFormat("###,###.##");
        /**
         *  数字格式:
         *    # 代表任意数字
         *    , 代表千分位
         *    . 代表小数点
         *    0 代表不够时补0
         * */
        String s = df.format(1234.56);
        String s2 = df.format(123456789.10);
        System.out.println(s);  //1,234.56
        System.out.println(s2);  //123,456,789.1

        DecimalFormat df2 =new DecimalFormat("###,###.0000");
        String s3 = df2.format(1234.56);
        System.out.println(s3);  //1,234.5600


    }
}
  • 在Java中有一种精度更高的数据类型,属于引用数据类型:BigDecimal
public class BigDecimal {
    public static void main(String[] args) {
        //这是一个精度非常高的100
        BigDecimal v1 = new BigDecimal(100);
        //这是一个精度非常高的200
        BigDecimal v2 = new BigDecimal(200);
        
        /** 两个BigDecimal类型数字的加减乘除需要调方法
         * 加 add()
         * 减 subtract()
         * 乘 multiply()
         * 除 divide()
         */
        
        //这里两个精度极高的数字要做加法要用add()方法
        BigDecimal v3 = v1.add(v2);
        System.out.println(v3);//300

        
    }

}

3.随机数

  • 在java.util中有一个Random可以产生随机数。
public class RandomTest {
    public static void main(String[] args) {
        Random random = new Random();
        //产生一个随机数字
        int num1 = random.nextInt();
        System.out.println(num1);  //1887415746

        //产生[0-100]之间的随机数,不包括101
        int num2 = random.nextInt(101);
        System.out.println(num2);  //14
    }
}
  • 产生5个不重复[0-100]的随机数,重复的时候重新生成,最终生成的5个随机数放到数组中。
import java.util.Arrays;
import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[5];
        //初始化数组
        for (int i = 0; i < arr.length; i++) {
            arr[i] = -1;
        }
        Random random = new Random();

        //定义当前下标
        int index = 0;
        while (index < arr.length){
            int num = random.nextInt(101);
            if(!contains(arr,num)){
                arr[index++] = num;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.printf(arr[i] + " ");  //76 47 100 27 42 
        }

    }

    //用一个方法判断数组中是否有某个值
    public static boolean contains(int[] arr,int key){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == key){
                return true;
            }
        }
        return false;
    }
}

4.枚举

  • 如果需要返回两种情况时,可以使用boolean类型,当需要返回三种、四种等情况,就使用Java语音中枚举类型enum。
  • 枚举在编译之后也是生成class文件
  • 枚举是一种引用数据类型,每个值可以看做一个常量。
  • 结果只有两种,使用boolean类型,如果超过两种并且可以列举出来的,建议使用枚举来编写。
public class EnumTest {
    public static void main(String[] args) {

        Result r = divide(10,0);
        System.out.println(r == Result.SUCCESS ? "计算成功" : "计算失败");
    }

    /**
     * 计算两个int类型数据的商
     * @param a
     * @param b
     * @return  Result.SUCCESS为成功, Result.FAIL为失败
     */
    public static Result divide(int a,int b){
        
       //这里为异常的知识点,try中运行时如果发生异常
       //catch会捕获出异常,运行catch的语句。
        try{
            int c = a / b;
            return Result.SUCCESS;
        }catch (Exception e){
            return Result.FAIL;
        }
    }

}
//一个成功,失败的枚举
enum Result{
    SUCCESS,FAIL
}
//一个四季枚举
enum Season{
    SPRING,SUMMER,AUTUMN,WINTER
}

——本章节为个人学习笔记。学习视频为动力节点Java零基础教程视频:动力节点—JAVA零基础教程视频

你可能感兴趣的:(咖啡ice的Java学习记录,java,开发语言)