Java核心类

JDK核心类

  • 包装类
  • Math/Random/UUID
  • 日期类

包装类

将基本数据进行一个封装,形成对应的数据类型
Byte、Short、Integer、Long、Float、Double、Character、Boolean
Number 用来表示数字,是 Byte、Short、Integer、Long、Float、Double的父类、Number是一个抽象类
Number 中定义了 6个方法,分别是 byteValue , shortValue … doubleValue 分别返回对应的基本数据类型,这6个方法是将包装类转成基本数据类型的方法
基本数据类型对应的包装类 都是 final 修饰的,不允许被继承、且实现了 Comparable接口,代表可以比较两个对象的大小
包装类是一个引用数据类型,所以包装类对应的属性默认值是 null

定义包装类对应的对象

// JDK9 过时
Integer in = new Integer(3) ;
// JDK9 过时
Integer in = new Integer("3") ;

// 通过 包装类提供的 valueOf 静态方法 构造对象

Integer.valueOf(3) ;  // 将基本数据类型转换成包装类

Integer.valueOf("3") ;
Integer.valueOf("abc", 16) ;


Boolean.valueOf(str) : 
    如果 str 的内容为 true 字符串(忽略大小写),则结果为 true ,否则 均为 false

基本数据类型 和 包装类的相互转换

  • 基本数据类型转成包装类
Integer.valueOf(3) ;
  • 将包装类转成基本数据类型
Integer x = ...... ; 
x.intValue() ; 

自动封箱和自动拆箱

  • 自动封箱: 将基本数据类型自动转成与之对应的包装类

工作原理: 将基本数据类型对应的值作为 valueOf 的参数,转成包装类

  • 自动拆箱: 将包装类转成对应的基本数据类型

工作原理: 会将包装类对应的对象自动调用 xxxValue() 方法,进行拆箱

数字类型的包装类对应的Cache(缓存)

== :如果比较的是基本数据类型,那么比较的是值是否相等,如果比较的是引用类型,那么比较的是地址

Integer a = 100 ;
Integer b = 100 ;

a == b // true

Integer a = 1000;
Integer b = 1000 ;

a == b // false

包装类(整数) 在进行值判断是否相等的时候,必须用 equals , 如果用 == , 在 -128 ~ 127之间的内容比较的时候都是 true

整数对应的包装类中,都定义了一个 XxxCache, 类中定义一个 final 修饰的 cache 数组
cache 数组中,初始化了256个数据,且 存放的是 -128 ~ 127
在进行自动封箱的时候,会默认调用 valueOf 静态方法, 将传入的基本类型对应值进行一个判断
如果值在 -128 ~ 127 之间,那么会从 cache 缓存中获取该值(值只要相同,每次得到的都是同一个对象)
如果值不在 这个区间、会使用 new 调用对应的构造方法创建对象(无论值是否相同,地址都不会一样)

其它

  • 包装类中的常见静态方法

  • Xxx.parseXxx() : 将字符串转成对应的数字

Interger.parseInt(str) :

Double.parseDouble(str): 

  • Xxx.valueOf() : 将字符串转成对应的数字

  • Integer.toBinaryString : 转2进制

  • Integer.toOctalString : 转8进制

  • Integer.toHexString :转16进制

  • Integer.toString(n, radix) : 将 n 转成 radix 对应的进制

  • MAX_VALUE : 最大值

  • MIN_VALUE : 最小值

Math

封装了大量的数学方法、可以完成一些常见的数学运算
Math 是一个工具类、里面内置的都是 静态方法,直接使用类调用即可

  • abs(x) : 求一个数的绝对值
  • max(a, b) : 求两个数字的最大值
  • min(a, b):
  • pow(a, b) : 求 a的 b次方, 返回是一个 double 类型
  • sqrt(a) : 获取一个数字的算术平方根
  • ceil(a) : 向上取整、返回 double
  • floor(a) : 向下取整、返回 double
  • round(a) : 四舍五入、返回 int
  • sin(弧度) : 弧度 = 度 / 180 * Π
  • random() : 返回一个 0 ~ 1 (不包含1)的随机小数
    • 返回一个 3 ~ 100之间的随机数。 Math.random() * (上限 - 下限) + 下限

Random

专门用来实现产生随机数的一个类

new Random().nextInt(n) : 产生一个 0 ~ N 之间的随机整数

UUID

用来产生一个随机的且不会重复的字符串
UUID.randomUUID() : 随机产生一个 长度为 36的 不会重复的字符串

日期和时间

  • Date : 用来表示日期的一个类、表示的是一个瞬时时间

构造方法

  • new Date() : 创建一个当前系统时间
  • new Date(long) : 创建一个距离 1970-1-1的毫秒数对应的时间

常见的方法

  • compareTo(Date date) : 比较两个日期大小
  • before(Date date) : 判断是否在传入的日期之前
  • after(Date date) : 判断是否在传入的日期之后
  • getTime() : 获取 距离 1970-1-1的毫秒数
  • setTime() : 设置 距离 1970-1-1的毫秒数

SimpleDateFormat

进行简单日期格式化的一个类、专门服务于Date

创建一个 SimpleDateFormat 对象
new SimpleDateFormat(pattern) 
常见的 pattern 支持的日期格式有
  • yyyy : 代表 四位数的年份

  • MM : 代表 2位数的月份、不够位数、前面补0

  • dd : 代表 2位数的天、不够位数、前面补0

  • HH : 代表 24进制的小时

  • hh : 代表 12进制的小时

  • mm : 代表 2位数的 分钟

  • ss : 代表 2位数的 秒

  • SSS : 代表 3位数的 毫秒

  • E : 代表星期

常见的方法
  • format(Date date) : 将一个日期按照指定的pattern 转成字符串
Date date = new Date(); 

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;

String  x = df.format(date)

  • parse(String str) : 将一个字符串按照指定的pattern解析成日期对象
String time = "2022-01-11"

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd") ;

Date date = df.parse(time)

Calendar (日历类)

是一个抽象类、不能直接创建对象,但可以通过 静态方法 getInstance() 快速构建一个日历类
Calendar 定义的 常量 非常重要

Calendar calendar = Calender.getInstance();

常见的基本方法

  • calendar.getTime() : 将 日历转成 日期Date
  • calendar.setTime(Date date) : 将一个日历 重置到 指定的 日期
  • set(year, month , day) : 将 一个日历 重置到指定的年月日,月份从0开始,0代表 1月
  • set(year, month ,day, hour, min, sec) :

常见的 常量

  • YEAR :年份
  • MONTH :月份
  • WEEK_OF_YEAR : 一年的第几周
  • WEEK_OF_MONTH : 一月的第几周
  • DAY_OF_MONTH / DATE : 一个月第几天
  • DAY_OF_YEAR : 一年的第几天
  • DAY_OF_WEEK : 星期
  • HOUR : 12进制小时
  • HOUR_OF_DAY : 24进制小时
  • MINUTE : 分钟
  • SECOND : 秒
  • MILLISECOND : 毫秒
  • SUNDAY , MONDAY , … : 星期 (1 代表周日,… , 7 代表 周六)
  • JANUARY , FEBRUARY , …: 月份 (0 代表 1月, … 11 代表 12月)
  • AM : 上午
  • PM : 下午

和 常量 相关的 日历方法

  • add(field , amount) : field 就是 Calendar 中定义的常量(只能使用和时间相关的常量)
Calendar calendar = Calendar.getInstance(); 

// 将日历 的月份增加 3月 
calendar.add(Calendar.MONTH, 3) ;

  • set(field, value) : 修改指定的常量代表的含义对应的值
Calendar calendar = Calendar.getInstance(); 

// 将日历 的月份设置 4月 
calendar.set(Calendar.MONTH, 3) ;

  • get(field) : 根据常量代表的含义获取对应的信息
Calendar calendar = Calendar.getInstance(); 

// 获取 当前 日历是 星期几 
calendar.get(Calendar.DAY_OF_WEEK) ;

  • getActualMaximum(field) : 获取指定属性在日历对应的时间中的最大值

  • getActualMinimum(field) : 获取指定属性在日历对应的时间中的最小值

使用 Calendar 打印 某一个年的 某个月对应的日历

JDK8 新增的日期API (java.time包)

  • LocalDateTime : 一个处理 日期和时间的类
  • LocalDate : 一个处理 日期的类
  • LocalTime :一个处理 时间的类

表示时间的精度度可以精确到 纳秒

使用 静态方法 创建对象的方式

LocalDateTime.now() : 创建一个当前时间的日期和时间对象

LocalDateTime.of(int year, int month , int day, int hour, int min) :
LocalDateTime.of(int year, int month , int day, int hour, int min, int sec) :
LocalDateTime.of(int year, int month , int day, int hour, int min, int sec, int na…) :

新版日期格式化类 DateTimeFormatter

  • 将 日期格式化为字符串
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd")

df.format(LocalDate.now()) ;

  • 将字符串解析成日期
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd")
LocalDate date = LocalDate.parse(str, df) ;

日期的增量操作

  • plusXxx(n) : 增加多少
LocalDate date = LocalDate.now();

date.plusYears(1)  // 增加 1年 

date.plus(1, ChronoUnit.DAYS) // 增加 1天 

date.plus(Duration.ofSeconds(3)) // 增加 3秒
  • minusXxx(n) : 减少多少, 具体用法详见 plusXxx

  • withXxx(n) : 重置时间和日期

now.withHour(3) : 重置 时间为 3点 

now.with(ChronoField.HOUR_OF_DAY , 3):重置 时间为 3点 

now.with(LocalDate.of(1999, 11, 11)): 重置 日期为 1999-11-11,时间不变

  • getXxx() : 获取 对应的 日期属性信息

  • get(ChronoField) : 获取 对应的 日期属性信息

时区

TimeZone 老版时区

  • TimeZone.getAvailableIDs() : 获取计算机识别的所有时区, 返回 String[]
  • TimeZone.getDefault(): 获取 默认时区 (Asia/Shanghai)
  • TimeZone.getTimeZone(“Asia/Chongqing”) : 获取指定的时区

ZoneId 新版时区

  • ZoneId.getAvailableZoneIds() : 获取计算机识别的所有时区, 返回 Set
  • ZoneId.systemDefault() : 获取 默认时区 (Asia/Shanghai)
  • ZoneId.of(“America/Bahia”) : 获取指定的时区

ZonedDateTime (带有时区的时间)

用法和 LocalDateTime 相同,比LocalDateTime多了一个时区ZoneId

时间间隔 Duration

  • Duration.ofDays(n) : 间隔多少天

  • Duration.ofHours(n) : 间隔多少小时

  • Duration.ofMinutes(n): 间隔多少分

  • Duration.ofSeconds(n): 间隔多少秒

  • Duration.ofMillis(n): 间隔多少毫秒

  • Duration.ofNanos(n): 间隔多少纳秒

  • Duration.between(a, b) : 获取两个日期间隔的时间

Instant 高精度的日期类

作用 和 Date 一样, 可以精确到 纳秒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值