StringBuilder
StringBuilder / StringBuffer : 字符串缓冲区类 ("可变字符串类型") -> 便捷操作字符串对象的类
StringBuilder : 效率高,线程不安全的类
StringBuffer : 线程安全,效率低的类
StringBuilder / StringBuffer 和 String 什么关系 : 没有关系 (便捷操作字符串对象的类)
构造方法:
StringBuilder() : 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder(String str) : 构造一个字符串生成器,并初始化为指定的字符串内容
常用的成员方法:
int length() : 长度获取 (sb中的字符数量)
int capacity() : 容量
**StringBuilder append(任意类型的数据): 把传入的数据拼接到原sb对象上,并返回对象自己
**StringBuilder reverse() : 一键翻转并返回自己
String toString():把sb对象转换成字符串对象
char charAt(int index) : 获取指定索引位置的字符
int indexOf(String str) : 找到传入字符串在sb对象中第一次出现的索引位置
int lastIndexOf(String str) : 找到传入字符串在sb对象中最后一次出现的索引位置
String substring(int start) : 截取
String substring(int start, int end) : 范围截取 [start,end)
Math
Math : 关于数学运算的工具类 (工具类的特点所有的成员都被static修饰)
自定义常量:
static double E 自然对数的底数
static double PI 圆周率
常用方法:
static double abs(int a) : 求绝对值 (正数是本身,负数是取反)
static double cbrt(double a) : 求a立方根
static double ceil(double a) : 天花板 -> 对a进行向上取整
static double floor(double a) : 地板 -> 对a进行向下取整
static long round(double a) : 四舍五入
static int max(int a, int b) : 求a,b的最大值
static int min(int a, int b) : 求a,b的最小值
* static double pow(double a, double b) : 求a的b次幂
* static double random() : 生成一个随机数 [0,1.0)
System
System : 系统操作的工具类
自定义常量:
static PrintStream out : 标准的系统输出流 -> 只做打印数据到控制台
static InputStream in : 标准的系统输入流 -> 只做键盘录入
static PrintStream err : 标准的系统错误流 -> 只做打印数据到控制台(开启红色字体,开启新的线程)
静态方法:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) : 数组复制
Object src : 原数组
int srcPos : 原数组的定位
Object dest : 目标数组
int destPos : 目标数组的定位
int length : 长度 (复制多少个元素)
static long currentTimeMillis() : 获取当前时间毫秒
1秒second = 1000毫秒millis
1毫秒 = 1000微秒MicroMillis
1微秒 = 1000纳秒Nano
当前时间毫秒值 = 当前时间 - 时间原点 的毫秒值
时间原点 : 1970年01月01日 08:00:00 +8区 / 1970年01月01日 00:00:00 +0区
static void exit(int status) : 退出JVM
int status : 状态码 (非0即为异常退出)
static void gc() : 主动启动垃圾回收机制
Arrays
Arrays : 数组操作的工具类
静态方法 :
static int binarySearch(int[] a, int key) : 通过二分查找法寻找数组中的元素索引位置
static int[] copyOf(int[] original, int newLength) : 把老数组中的元素赋值到指定长度的新数组中,新数组就是返回值
static boolean equals(int[] a, int[] a2) : 比较2个数组的内容是否相同
static void fill(int[] a, int val) : 把指定的值val填充到指定的数组a中
static void sort(int[] a) : 对数组a进行排序(排序规则: 自然升序排序,排序原理: 快速排序)
static String toString(int[] a) : 漂亮打印数组
Object
Object : 根类,超类,基类
它是所有类的父类,Java所有的类都直接或者间接的继承于Object
构造方法:
Object() : 为什么所有的构造方法的第一句默认送的是 super()
成员方法:
Class getClass() : 获取对象的字节码对象 -> 一个类中只可能有一个Class对象
Class : 类的类
int hashCode() : 获取对象的哈希值 -> 子类没有重写父类的hashCode之前,Object中的hashCode就是在获取对象的地址值(十进制的地址值)
Object中的toString方法
String toString() : 把对象转换成字符串对象
结论 : 直接使用对象就是在使用对象.toString()方法的结果!
Object类中toString源码分析:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass().getName() + "@" + Integer.toHexString(hashCode())
左边 :
this.getClass().getName(): this获取自己类的字节码对象的名称(全类名)
右边 :
Integer.toHexString(hashCode())
先: this.hashCode() : 获取对象的十进制地址值(学生类没有重写hashCode)
后: Integer.toHexString(对象的十进制地址值) : 把对象的十进制地址值转换成16进制的数
Object类中toString()方法的功能 :返回 -> 全类名@对象16进制的地址值
现在有新的需求: 希望打印对象的时候看到不是地址值而是对象的属性值!
解决方案 : 重写父类的toString方法
自动生成toString方法 alt + insert 选择toString
Object中的equals方法
boolean equals(Object obj) : 拿传入的对象和调用方法的对象进行比较
Object类中equals源码分析:
public boolean equals(Object obj) {
return (this == obj);
}
想比较2个对象是否相等比较的是对象的属性值是否相同而不是地址值是否相同!
自定义事物描述类的编写步骤
1. 私有所有的属性
2. 生成无参构造
3. 生成全参构造
4. 生成getter and setter方法
5. 自动重写equals and hashCode方法
6. 自动重写toString方法
Objects
Objects 操作对象的工具类 -> 此工具类中最喜欢做非空校验!!
从JDK1.7版本才有!
静态方法:
static boolean isNull(Object obj) : 判断传入的对象是否为null (是: true,不是: false)
static boolean nonNull(Object obj) : 判断传入的对象是否不是null (不是: true, 是: false)
static boolean equals(Object a, Object b) : 对a对象进行非空校验,调用a对象的equals方法
源码: (a == b) || (a != null && a.equals(b))
static int hash(Object... values) : 对values进行非空校验,然后调用values的hashCode方法
static String toString(Object o) : 对o进行非空校验,然后调用o对象的toString方法
源码: (o == null) ? "null" : o.toString()
static String toString(Object o, String nullDefault) :对o进行非空校验,然后调用o对象的toString方法 ->nullDefault: 如果o为null 返回的内容就是nullDefault
源码: (o != null) ? o.toString() : nullDefault;
BigDecimal
BigDecimal : 精度运算的类 (对浮点类型的数据进行高精度运算)
小数是无法通过二进制精准表示的!
不可变的,改变就生成新的对象 -> 记得接收
构造方法:
BigDecimal(double val) : 不要用!!!
BigDecimal(String val) : 推荐使用!!
四则运算的方法:
加 : BigDecimal add(BigDecimal augend)
减 : BigDecimal subtract(BigDecimal subtrahend)
乘 : BigDecimal multiply(BigDecimal multiplicand)
除 : BigDecimal divide(BigDecimal divisor)
带有保留小数点后几位和舍入模式的除法:
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
int scale: 保留小数点后几位
RoundingMode : 舍入模式 RoundingMode: 枚举类 (类名.枚举项)
向上取整 : RoundingMode.UP/RoundingMode.CEILING (正数情况是一样的)
向下取整 : RoundingMode.DOWN/RoundingMode.FLOOR(正数情况是一样的)
四舍五入 : RoundingMode.HALF_UP
时间类
Date类型的时间
long类型的时间 -> 毫秒值 -> 可以计算
String类型的时间 -> 最好表示的时间 -> "1991-01-01"
Date
Date : 日期(当你创建一个Date对象的时候,定位到的时间瞬间就是Date对象) -> 单位: 毫秒值
创建对象:
Date() : 指向创建Date对象的瞬间时间;
Date(long date): 先把时间清零,再加上传入的时间毫秒值定位的时间瞬间
规律 : 在时间操作中看到long类型的时间第一反应是毫秒值!
成员方法:
String toLocaleString() : 以本地时间表示习惯表示Date对象日期
String toGMTString() : 以0时区表示习惯表示Date对象日期
long getTime() : 获取时间的毫秒值(当前Date对象指向的时间 - 时间原点)
void setTime(long time) : 根据传入的时间毫秒值设置Date对象指向的时间瞬间
1. 先把时间清零 2. 加上传入的时间毫秒值 -> 定位新的Date时间
Date类型的时间 ---> long类型的时间
long getTime() : 获取时间的毫秒值(当前Date对象指向的时间 - 时间原点)
long类型的时间 ---> Date类型的时间
1. Date(long date): 先把时间清零,再加上传入的时间毫秒值定位的时间瞬间
2. void setTime(long time) : 根据传入的时间毫秒值设置Date对象指向的时间瞬间
SimpleDateFormat
SimpleDateFormat: 简单日期格式化的类 -> String类型的时间和Date类型的时间 之间的转换
字符串时间 -按什么格式解析-> Date时间 --> 解析 Parse
Date时间 -按什么格式格式化-> 字符串时间 --> 格式化 format
构造方法:
SimpleDateFormat(String pattern) : 以指定的格式来创建SimpleDateFormat对象
String pattern: 指定日期格式 -> 时间代码
"yyyy年MM月dd日 HH:mm:ss"
成员方法:
String format(Date date) : 格式化日期
Date parse(String strDate) : 解析字符串时间
注意: 要求此字符串日期格式要和创建SimpleDateFormat对象时指定的日期格式一模一样!!
![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/c66250fab73376a474c3fad13c1c8d3f.png)
Calendar
Calendar : 日历类
子类 : GregorianCalendar
文化差异:
1. 礼拜天是一周的第一天
2. 月份序号 : 0代表1月
如何创建抽象类Calendar对象:
static Calendar getInstance() :拿到的是现在!
获取和设置日历对象的信息 :
int get(int field) : 获取指定日历字段信息
int field : 日期字段
void set(int field, int value) : 设置日历信息
void set(int year, int month, int date, int hourOfDay, int minute, int second)
Calendar类和其他时间类的转换功能
Calendar --> Date
Calendar类 : Date getTime() : 通过Calendar对象获取Date对象
Date --> Calendar
Calendar类 : void setTime(Date date) : 把date对象指向的时间定位到调用方法的Calendar对象上
Calendar --> long毫秒值
* long getTimeInMillis() : 日历时间转换成毫秒值
long毫秒值 --> Calendar
void setTimeInMillis(long millis) : 把时间毫秒值转换为Calendar
LocalDateTime/LocalDate/LocalTime
DateTimeFormater
Period
Duration