包装类 & 日期 & 随机数 & 枚举

八大包装类

  1. java中为8种基本数据类型对应提供了8种包装类

  2. 八种包装类为引用数据类型

  3. 父类是Object

  4. 在JDK1.5后支持自动装箱/自动拆箱

异常

  • 数字格式化异常NumberFormatException

  • Integer x = new Integer(“ab”); // 报异常

  • int i = Integer.parseInt(“as”); // 异常

parseInt 是Integer里的静态方法

作用:将字符串转化成int “123”可以转 “ab”不能转

包装类 & 日期 & 随机数 & 枚举 - 图1包装类 & 日期 & 随机数 & 枚举 - 图2


Date

创建

  1. java.util.Date 先导包
  2. Date newTime = new Date() // 调用空构造器创建对象
  3. System.out.print(newTime);
  4. 输出当前时间
  5. Date类的toString()已经重写

日期格式化

  1. SimpleDateFormat sdf = new SimpleDateFormat("日期格式")
  2. /*
  3. yyyy 年
  4. MM 月
  5. dd 日
  6. HH 时
  7. mm 分
  8. ss 秒
  9. SSS 毫秒
  10. 例如 ("yyyy-MM-dd HH:mm:ss:SSS")
  11. String t = sdf.format(newTime);
  12. */
  13. System.out.println(t); //2020-4-17 22:46:33 113

字符串转换Date

  1. String time = 2008-08-08 08:08:08 888;
  2. SimpleDateFormat a = new SimpleDateFormat("格式要求于字符串日期一致")
  3. Date s = a.parse(time); 返回一个日期类型

获取1970到现在的总毫秒

  1. long begin = System.currentTimeMills(); // 返回一个long类型
  2. Date d = new Date(begin - 1000 * 60 * 60 * 24);
  3. 得到了1970年到现在的总毫秒数
  4. 获取两个毫秒相减可以测出程序用时

获取系统当前时间

  1. Date d = new Date();

日期格式化

Date —— > String

  1. yyyy-MM-dd HH:mm:ss SSS
  2. SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss SSS");
  3. String s = sdf.format(new Date());

String —— > Date

  1. SimpleDateFormat sdf = new SimpleDate("yyyy-MM-dd HH:mm:ss");
  2. Date d = sdf.parse("2008-08-08 08:08:08");

随机数Random

  1. 创建随机数
  2. Random a = new Random();
  3. int s = a.nextInt(); // 得到随机数
  4. 创建有范围随机数
  5. int s2 = a.nextInt(101);
  6. 范围前闭后开 0~100 没有101

枚举

  1. 一枚一枚可以列举出来

  2. 枚举编译出来也是class文件

  3. 枚举是引用数据类型

语法:

  1. enum 枚举类型名{
  2. 枚举值1,枚举值2,枚举值3,(全部大写)
  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的方式直接创建,需要采用工厂方法加以实例化.

  1. public static void main(String[] args) throws ClassNotFoundException {
  2. // 使用now方法创建Instant的实例对象
  3. // Instant 创建的对象中的时间是格林威治的时间 [国际标准时间]
  4. // 2021-04-01T08:11:27.093Z
  5. Instant instant = Instant.now();
  6. // 使用now方法创建LocalDate对象
  7. // 2021-04-01
  8. LocalDate localDate = LocalDate.now();
  9. // 使用now方法创建LocalTime对象
  10. // 16:11:27.229
  11. LocalTime localTime = LocalTime.now();
  12. // 使用now方法创建LocalDateTime对象
  13. // 2021-04-01T16:11:27.229
  14. LocalDateTime localDateTime = LocalDateTime.now();
  15. // 使用now方法创建ZonedDateTime
  16. // 2021-04-01T16:11:27.230+08:00[Asia/Shanghai]
  17. ZonedDateTime zonedDateTime = ZonedDateTime.now();
  18. System.out.println(instant);
  19. System.out.println(localDate);
  20. System.out.println(localTime);
  21. System.out.println(localDateTime);
  22. System.out.println(zonedDateTime);
  23. }

不仅仅是刚才提供的及各类可以使用now方法,Java8的Time包中还提供了其他的几个类可以更加精准的获取某些信息,同时他们的实例化也需要调用他的静态方法 now

Year类:表示年

YearMonth类:表示月

MonthDay类:表示月日

  1. // 使用now方法创建Year 2021
  2. Year year = Year.now();
  3. // 使用now方法创建Month 2021-04
  4. YearMonth yearMonth = YearMonth.now();
  5. // 使用now方法创建MonthDay --04-01
  6. MonthDay monthDay = MonthDay.now();

3、of方法在日期/时间类的应用

创建自定义时间对象的方法

of方法可以根据给定的参数生成对应的日期/时间对象,基本上每个基本类都有;

of方法用于生成的对应的对象,而且重载形式多变,可以根据不同的参数生成对应的数据。

  1. MonthDay monthDay = MonthDay.of(10, 10);
  2. // 调用LocalDate的静态方法of() 创建2000/10/30 时间
  3. LocalDate localDate = LocalDate.of(2000,10,30);
  4. /* 初始化一个晚上8点0分0秒的LocalTime对象 [24小时制]
  5. ,如果秒和纳秒都是0的化,就不会封装这些数据,只显示小时分钟
  6. LocalTime of(int hour, int minute, int second, int nanoOfSecond) 根据 时分秒纳秒创建对象
  7. */
  8. LocalTime localTime = LocalTime.of(20, 0, 0);
  9. /*
  10. 初始化一个2018年8月8日的下午8点0分0秒的LocalDateTime对象
  11. LocalDateTime.of方法的重载形式有以下几种,可以根据实际情况自行使用
  12. LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) 根据年月日时分秒生成对象
  13. 根据年月日时分秒纳秒生成对象
  14. LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
  15. */
  16. LocalDateTime localDateTime = LocalDateTime.of(2018, 8, 8, 20, 0, 0);