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...
}
例如:颜色、四季、红绿灯
例子1:
package enumTest;
/**
* @Author: TSCCG
* @Date: 2021/07/06 22:34
*
*/
public class EnumDemo01 {
public static void main(String[] args) {
check(Season.SUMMER);
}
public static void check(Season season) {
switch (season) {
case SPRING:
System.out.println("现在是春天");
break;
case SUMMER:
System.out.println("现在是夏天");
break;
case AUTUMN:
System.out.println("现在是秋天");
break;
case WINTER:
System.out.println("现在是冬天");
break;
default:
break;
}
}
}
/**
* 四季
*/
enum Season {
/**
* SPRING 春
* SUMMER 夏
* AUTUMN 秋
* WINTER 冬
*/
SPRING,SUMMER,AUTUMN,WINTER
}
结果:
现在是夏天
例子2:
package enumTest;
import java.util.Random;
/**
* @Author: TSCCG
* @Date: 2021/07/07 10:18
*/
public class EnumDemo03 {
public static void main(String[] args) {
Random random = new Random();
//给一个[0~90)的随机数字
int num = random.nextInt(90);
if (num >= 0 && num < 30) {
ColorLight.RED.description();
} else if (num >= 30 && num < 60) {
ColorLight.GREEN.description();
} else {
ColorLight.YELLO.description();
}
}
}
enum ColorLight {
/**
* 红绿黄灯
*/
RED {
@Override
void description() {
System.out.println("红灯停");
}
},GREEN {
@Override
void description() {
System.out.println("绿灯行");
}
},YELLO {
@Override
void description() {
System.out.println("黄灯亮了停一停");
}
};
abstract void description();
}
结果:
绿灯行