Java教程

JavaseLearn22-常用类

本文主要是介绍JavaseLearn22-常用类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JavaseLearn22-常用类

1. 日期类Date

1.1 将Date类型转换成日期字符串String

package date;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 15:56
 */
public class DateDemo01 {
    public static void main(String[] args) {
        //获取系统当前时间(精确到毫秒的系统当前时间)
        //直接调用无参构造方法即可
        Date nowTime = new Date();
        //java.util.Date类已经重写了toString方法,可以直接输出一个日期字符串
        System.out.println("未格式化前:");
        System.out.println(nowTime);//Tue Jul 06 16:32:26 CST 2021
        /**
         * 直接打印出的格式不符合我们的习惯,可以将日期类型Date格式化,按照指定的格式进行转换:Date --> 具有一定格式的日期字符串String
         * SimpleDateFormat是java.txt包下的,专门负责日期格式化
         * 使用时将指定格式的字符串传入SimpleDateFormat的构造方法中
         * 指定格式:
         * 年:yyyy
         * 月:MM
         * 日:dd
         * 时:HH
         * 分:mm
         * 秒:ss
         * 毫秒:SSS(毫秒3位,最高999,1000毫秒等于1秒)
         * 注意:在日期格式中,除y M d H m s S这些字符外其他可自定义
         */
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS");//格式1
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//格式2
        //将当前时间转换成指定格式的字符串
        String nowTimeStr1 = sdf1.format(nowTime);
        String nowTimeStr2 = sdf2.format(nowTime);
        System.out.println("格式化后:");
        System.out.println(nowTimeStr1);
        System.out.println(nowTimeStr2);

    }
}

结果:

未格式化前:
Tue Jul 06 16:52:30 CST 2021
格式化后:
2021/07/06 16:52:30 913
2021-07-06 16:52:30 913

1.2 将一个日期字符串转换成Date类型

上面的例子是将Date类型转换成一个具有一定格式的日期字符串String,那么如何将一个具有一定格式的日期字符串转换成Date类型呢?

假设现在有一个日期字符串:String firstTimer = "1999-04-06 20:20:20";

package date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 15:56
 * 将一个日期字符串转换成Date日期类型
 */
public class DateDemo01 {
    public static void main(String[] args) {
        //日期字符串
        String firstTimer = "1999-04-06 20:20:20";
        //格式必须跟日期字符串格式一致
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //新建一个日期对象
        Date date = null;
        try {
            //进行转换
            date= sdf3.parse(firstTimer);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date);
    }
}

结果:

Tue Apr 06 20:20:20 CST 1999

1.3测试程序执行时间

1.3.1 获取自1997年1月1日 00:00:00 000到当前系统时间度过的总毫秒数

System.out.print("自1997年1月1日 00:00:00 000到当前系统时间度过的总毫秒数:");
System.out.println(System.currentTimeMillis());
自1997年1月1日 00:00:00 000到当前系统时间度过的总毫秒数:1625564175343

这个方法有什么用呢?

度过的总毫秒数时时刻刻都在增加,我们可以利用这点来测量程序的执行时间。

我们可以在一段代码执行前和执行后分别获取一次度过的总毫秒数,相减,即可获得执行时间。

1.3.2测试一个线程的执行时间

package date;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 17:22
 */
public class DateDemo02 {
    public static void main(String[] args) throws InterruptedException {
        //通过匿名内部类的方式创建一个线程
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println(Thread.currentThread().getName() + "--->" +  i);
                }
            }
        });
        //设置线程名称
        t1.setName("t1");
        //在线程执行前测一次
        Long begin = System.currentTimeMillis();
        //开启线程
        t1.start();
        //让线程t1先执行完毕
        t1.join();
        //在线程执行后再测一次
        Long end = System.currentTimeMillis();
        //统计花费时间
        System.out.println("t1线程运行耗费了" + (end - begin) + "毫秒");
    }
}

结果:

t1--->0
t1--->1
t1--->2
t1--->3
t1--->4
t1--->5
t1--->6
t1--->7
t1--->8
t1--->9
t1线程运行耗费了1毫秒

1.4 Date的有参构造

Date(long date)

分配一个 Date对象并初始化它代表指定的毫秒数,因为标准的基准时间被称为“时代”,即1970年1月1日格林尼治时间就是。

1.4.1 获取从1970-1-1 00:00:00 000格林尼治时间过了1毫秒的日期

package date;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 17:59
 */
public class DateDemo03 {
    public static void main(String[] args) {
        //参数是一个毫秒,意为从1970-1-1 00:00:00 000格林尼治时间过了1毫秒的日期
        Date date1 = new Date(1);
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String timeStr1 = sdf1.format(date1);
        System.out.println(timeStr1);
    }
}

北京是东八区,差8小时。

1970-01-01 08:00:00 001

1.4.2获取昨天的当前时间

//格林威治时间到当前时间减去1天时间(1000毫秒*60*60*24)
Date date2 = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
String timestr2 = sdf1.format(date2);
System.out.println(timestr2);

结果:

2021-07-05 18:12:18 401

2. 数字类Number

2.1数字格式化

将数字转换成指定格式的字符串

package number;
import java.text.DecimalFormat;
/**
 * @Author: TSCCG
 * @Date: 2021/07/06 18:30
 * 关于数字的格式化
 */
public class NumberDemo01 {
    public static void main(String[] args) {
        //java.text.DecimalFormat专门负责数字格式化
        //DecimalFormat df = new DecimalFormat("数字格式");
        /*
        数字格式:
        	# 代表任何数字
        	, 代表千分位
        	. 代表小数点
        	0 代表不够时补0
         */
        //###,###.## 表示加入千分位,保留两个小数
        DecimalFormat df1 = new DecimalFormat("###,###.##");
        String s1 = df1.format(1234.567);
        System.out.println(s1);

        //保留4位小数,不够补0
        DecimalFormat df2 = new DecimalFormat("###,###.0000");
        String s2 = df2.format(1234.567);
        System.out.println(s2);
    }
}

结果:

1,234.57
1,234.5670

2.2高精度BigDecimal

BigDecimal属于大数据,精度极高。不属于基本数据类型,属于java对象(引用数据类型)

这是SUN提供的一个类。专门用在财务软件里。

注意:财务软件中,double是不够的。

如果面试官问:你处理过财务数据吗?用的是哪一种类型?

绝对不要说double,要说java.math.BigDecimal

package number;

import java.math.BigDecimal;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 18:45
 */
public class NumberDemo02 {
    public static void main(String[] args) {
        //精度极高的100
        BigDecimal v1 = new BigDecimal(100);
        //精度极高的200
        BigDecimal v2 = new BigDecimal(200);
        //v1 + v2;不能使用这种形式,v1和v2都是引用,不能直接加减
        /*
        调用方法计算:
        add 加法
        subtract 减法
        multiply 乘法
        divide 除法
        remainder 求余
         */
        BigDecimal v3 = v1.add(v2);//精度极高的300
        System.out.println(v3);
    }
}

结果:

300

3. 随机数Random

3.1生成一个随机数

package ramdom;

import java.util.Random;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 19:03
 * 随机数
 */
public class RandomDemo01 {
    public static void main(String[] args) {
        //创建随机数对象
        Random random1 = new Random();
        //返回一个int类型取值范围内的随机数
        int num1 = random1.nextInt();
        System.out.println(num1);
        //返回一个范围为[0,100]范围内的随机数,不能取到101
        //nextInt意为下一个int类型的数据是101,表示只能取到100
        int num2 = random1.nextInt(101);
        System.out.println(num2);
    }
}

3.2 生成5个不重复的随机数

编写程序,生成5个随机数,如果重复的话,重新生成。

最终将生成的5个随机数放到数组里。要求数组中这5个随机数不能重复。

package ramdom;

import java.util.Random;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 20:02
 * 编写程序,生成5个随机数,如果重复的话,重新生成。
 * 最终将生成的5个随机数放到数组里。要求数组中这5个随机数不能重复。
 */
public class RandomDemo02 {
    public static void main(String[] args) {
        Random random = new Random();
        int[] arr = new int[5];
        //为防止随机数与数组初始值相同,初始化数组,将数组中每个元素的初始值都变为-1
        for (int i = 0; i < arr.length; i++) {
            arr[i] = -1;
        }
        //定义下标为0
        int index = 0;
        while (index < 5) {
            //生成一个随机数,范围是[0~5]
            int num = random.nextInt(5);
            //判断,如果数组中没有这个随机数,将该随机数放入数组中,下标加1
            while (!contains(arr,num)) {
                arr[index++] = num;
            }
        }
        //打印数组
        for (int i : arr) {
            System.out.println(i);
        }

    }

    /**
     * 判断数组中是否包含某个元素
     * @param key 待查询的元素
     * @param arr 待遍历的数组
     * @return 如果包含返回true,如果不包含返回false
     */
    public static boolean contains(int[] arr, int key) {
        boolean isEmpty = false;
        for (int i = 0; i < arr.length; i++) {
            if (key == arr[i]) {
                isEmpty = true;
            }
        }
        return isEmpty;
    }

}

结果:

4
2
0
3
1

4.枚举Enum

4.1结果只有两种情况

结果只有两种情况时,建议使用boolean类型。

例:

package enumTest;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 23:18
 */
public class EunmDemo02 {
    public static void main(String[] args) {
        System.out.println(division(10,2) ? "运算成功" : "运算失败");
        System.out.println(division(10,0) ? "运算成功" : "运算失败");
    }
    public static boolean division(int a,int b) {
        try {
            int c = a / b;
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

结果:

运算成功
运算失败

4.2结果超过两种情况

结果超过两种情况,且还可以一枚一枚列举出来的,建议使用枚举类型。

枚举是一种引用数据类型

语法:

enum 枚举类型名 {
    //全部大写
    枚举值1,枚举值2,枚举值3...
}

例如:颜色、四季

例子:

package enumTest;

/**
 * @Author: TSCCG
 * @Date: 2021/07/06 22:34
 *
 */
public class EnumDemo01 {
    public static void main(String[] args) {
        String result = check(Season.SUMMER);
        System.out.println(result);
    }
    public static String check(Season season) {
        switch (season) {
            case SPRING:
                return "春天";
            case SUMMER:
                return "夏天";
            case AUTUMN:
                return "秋天";
            case WINTER:
                return "冬天";
            default:
                return "无法分辨季节";
        }
    }
}

/**
 * 四季
 */
enum Season {
    /**
     * SPRING 春
     * SUMMER 夏
     * AUTUMN 秋
     * WINTER 冬
     */
    SPRING,SUMMER,AUTUMN,WINTER
}

结果:

夏天
这篇关于JavaseLearn22-常用类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!