八大包装类
- 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 SSSSimpleDateFormat 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() 方法在日期/时间类的使用
:::info Date-Time API 中的所有类均生成不可变实例,他们是线程安全的,并且这些类不提供公共构造函数,也就是说没办法通过new的方式直接创建,需要采用工厂方法加以实例化. :::
public static void main(String[] args) throws ClassNotFoundException {// 使用now方法创建Instant的实例对象// Instant 创建的对象中的时间是格林威治的时间 [国际标准时间]// 2021-04-01T08:11:27.093ZInstant instant = Instant.now();// 使用now方法创建LocalDate对象// 2021-04-01LocalDate localDate = LocalDate.now();// 使用now方法创建LocalTime对象// 16:11:27.229LocalTime localTime = LocalTime.now();// 使用now方法创建LocalDateTime对象// 2021-04-01T16:11:27.229LocalDateTime 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);}
:::warning 不仅仅是刚才提供的及各类可以使用now方法,Java8的Time包中还提供了其他的几个类可以更加精准的获取某些信息,同时他们的实例化也需要调用他的静态方法 now :::
Year类:表示年YearMonth类:表示月MonthDay类:表示月日
// 使用now方法创建Year 2021Year year = Year.now();// 使用now方法创建Month 2021-04YearMonth yearMonth = YearMonth.now();// 使用now方法创建MonthDay --04-01MonthDay monthDay = MonthDay.now();
3、of方法在日期/时间类的应用
:::info
创建自定义时间对象的方法
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);
