包装类 & 日期 & 随机数 & 枚举
八大包装类
java中为8种基本数据类型对应提供了8种包装类
八种包装类为引用数据类型
父类是Object
在JDK1.5后支持自动装箱/自动拆箱
异常
数字格式化异常NumberFormatException
Integer x = new Integer(“ab”); // 报异常
int i = Integer.parseInt(“as”); // 异常
parseInt 是Integer里的静态方法
作用:将字符串转化成int “123”可以转 “ab”不能转
Date
创建
java.util.Date 先导包
Date newTime = new Date() // 调用空构造器创建对象
System.out.print(newTime);
输出当前时间
Date类的toString()已经重写
日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("日期格式")
/*
yyyy 年
MM 月
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒
例如 ("yyyy-MM-dd HH:mm:ss:SSS")
String t = sdf.format(newTime);
*/
System.out.println(t); //2020-4-17 22:46:33 113
字符串转换Date
String time = 2008-08-08 08:08:08 888;
SimpleDateFormat a = new SimpleDateFormat("格式要求于字符串日期一致")
Date s = a.parse(time); 返回一个日期类型
获取1970到现在的总毫秒
long begin = System.currentTimeMills(); // 返回一个long类型
Date d = new Date(begin - 1000 * 60 * 60 * 24);
得到了1970年到现在的总毫秒数
获取两个毫秒相减可以测出程序用时
获取系统当前时间
Date d = new Date();
日期格式化
Date —— > String
yyyy-MM-dd HH:mm:ss SSS
SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss SSS");
String s = sdf.format(new Date());
String —— > Date
SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse("2008-08-08 08:08:08");
随机数Random
创建随机数
Random a = new Random();
int s = a.nextInt(); // 得到随机数
创建有范围随机数
int s2 = a.nextInt(101);
范围前闭后开 0~100 没有101
枚举
一枚一枚可以列举出来
枚举编译出来也是class文件
枚举是引用数据类型
语法:
enum 枚举类型名{
枚举值1,枚举值2,枚举值3,(全部大写)
}
如果有两种情况使用boolean 多种情况使用枚举
数字类
DecimalFormat数字格式化
,###.## 表示加入千分位,保留两个小数。
,###.0000 表示加入千分位,保留4个小数,不够补0
BigDecimal
财务软件中通常使用BigDecimal
JDK新Date
1、 为什么会有新的日期类API
原本的
java.util.Date
类和java.util.Calendar
类有线程不安全的风险。JDK11版本开始,
Date
中的所有方法已经被弃用SimpleDateFormat
类是线程不安全的,在多线程情况下,全局共享一个SimpleDateFormat
类中的Calendar
对象可能会出现问题
最终java8引进了 java.time
包,这种全新的包从根本上解决了长久以来的问题
2、Date-Time API的基本类使用
2.1 常用类的概述和功能性介绍
**Instant**
类Instant
类对时间抽上的单一瞬时点建模,可以用于记录应用程序中的事件程序戳,在之后学习的类型转换中,均可以使用Instant类作为中间类完成转换**Duration**
类Duration
类表示纳秒时间间隔,适合处理较短的时间,需要更高的准确性**Period**
类Period
类表示一段时间的年、月、日**LocalDate**
类LocalDate
类是一个不可变的日期时间对象,表示日期,通常 被视为年月日。**LocalTime**
类LocalTime
类是一个不可变的日期时间对象,代表一个时间,通常被看作是小时-秒。时间表示为纳秒精度LocalDateTime
类LocalDateTime
类是一个不可变的日期时间对象,代表日期时间,通常被视为 年-月-日-时-分-秒**ZonedDateTime**
类ZoneDateTime
是具有失去的日期时间的不可变表示,此类存储所有日期和时间字段,精度为纳秒,时区为区域偏移量,用于处理模糊的本地日期时间。
2.2 now() 方法在日期/时间类的使用
Date-Time API 中的所有类均生成不可变实例,他们是线程安全的,并且这些类不提供公共构造函数,也就是说没办法通过new的方式直接创建,需要采用工厂方法加以实例化.
public static void main(String[] args) throws ClassNotFoundException {
// 使用now方法创建Instant的实例对象
// Instant 创建的对象中的时间是格林威治的时间 [国际标准时间]
// 2021-04-01T08:11:27.093Z
Instant instant = Instant.now();
// 使用now方法创建LocalDate对象
// 2021-04-01
LocalDate localDate = LocalDate.now();
// 使用now方法创建LocalTime对象
// 16:11:27.229
LocalTime localTime = LocalTime.now();
// 使用now方法创建LocalDateTime对象
// 2021-04-01T16:11:27.229
LocalDateTime localDateTime = LocalDateTime.now();
// 使用now方法创建ZonedDateTime
// 2021-04-01T16:11:27.230+08:00[Asia/Shanghai]
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(instant);
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);
System.out.println(zonedDateTime);
}
不仅仅是刚才提供的及各类可以使用now方法,Java8的Time包中还提供了其他的几个类可以更加精准的获取某些信息,同时他们的实例化也需要调用他的静态方法 now
Year
类:表示年
YearMonth
类:表示月
MonthDay
类:表示月日
// 使用now方法创建Year 2021
Year year = Year.now();
// 使用now方法创建Month 2021-04
YearMonth yearMonth = YearMonth.now();
// 使用now方法创建MonthDay --04-01
MonthDay monthDay = MonthDay.now();
3、of方法在日期/时间类的应用
创建自定义时间对象的方法
of方法可以根据给定的参数生成对应的日期/时间对象,基本上每个基本类都有;
of方法用于生成的对应的对象,而且重载形式多变,可以根据不同的参数生成对应的数据。
MonthDay monthDay = MonthDay.of(10, 10);
// 调用LocalDate的静态方法of() 创建2000/10/30 时间
LocalDate localDate = LocalDate.of(2000,10,30);
/* 初始化一个晚上8点0分0秒的LocalTime对象 [24小时制]
,如果秒和纳秒都是0的化,就不会封装这些数据,只显示小时分钟
LocalTime of(int hour, int minute, int second, int nanoOfSecond) 根据 时分秒纳秒创建对象
*/
LocalTime localTime = LocalTime.of(20, 0, 0);
/*
初始化一个2018年8月8日的下午8点0分0秒的LocalDateTime对象
LocalDateTime.of方法的重载形式有以下几种,可以根据实际情况自行使用
LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) 根据年月日时分秒生成对象
根据年月日时分秒纳秒生成对象
LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
*/
LocalDateTime localDateTime = LocalDateTime.of(2018, 8, 8, 20, 0, 0);