作用
一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
Object类的方法是一切子类都可以直接使用的
Object类的常用方法
toString存在意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息
equals存在的意义
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则
Object类与Object还是继承关系,Objects类是从JDK1.7之后才有的
官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的equals方法来比较两个对象
Objects的equals方法比较的结果是一样的,但是更安全
Objects的常见方法
StringBuilder是一个可变的字符串类,可以把它堪称是一个对象容器
作用:提高字符串的操作效率,如拼接,修改等
StringBuilder构造器
StringBuilder常用方法
案例:打印整型数组的内容
包含执行基本数字运算的方法,Math类没有提供公开的构造器
Math类的常用方法
System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化
System类的常用方法
用于解决浮点型运算精度失真问题
使用步骤
创建对象BigDecimal
BigDecima常用API
Date类的对象在Java中代表的是当前所在系统的此刻日期时间
Date的构造器
Date的常用方法
时间毫秒值->日期对象
SimpleDateFormat类作用
可以把对象或时间毫秒值格式化成常用的时间格式
也可以把字符串时间形式解析成日期对象
SimpleDateFormat的构造器
SimpleDateFormat的格式化方法
SimpleDateFormat解析字符串时间成为日期对象
需求:秒杀开始时间为 2022年 6月18日 00:00:00 - 2022年6月18日 00:10:00
小明下单并付款的时间为 2022年6月18日 00:03:58
小张下单并付款的时间为 2022年6月18日 00:10:38
判断他们是否秒杀成功
Calendar代表了系统此刻日期对应的日历对象
Calendar是一个抽象类,不能直接创建对象
Calendar常用方法
注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化
从Java8开始,Java.time包提供了新的日期和时间API,主要涉及的类类型有
LocalDate: 不包含jurisdiction时间的日期
LocallTime: 不含日期的时间
LocalDateTime: 包含了日期及时间
Instant: 代表的是时间戳
DateTimeFormatter 用于做时间的格式化和解析的
Duration: 用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便
其次,新API的类类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改
LocalDate、LocalTime、LocalDateTime
分别表示日期、时间、日期时间对象,它们的类的实例是不可变的对象
它们构建对象和API都是通用的
LocalDateTime综合了LocalDate和LocalTime里面的方法
这些方法返回的是一个新的实例的引用
Instant时间戳
时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8之前的Date
Instant和Date这两个类可以进行转换
DateTimeFormatter
在JDK8中,引入了一个全新的日期与格式器DateTimeFormatter
正反都能调用format方法
Period
在Java8中。可以使用java.time.Period
主要是Period类方法getYear(), getMonths() 和getDays() 来计算,只能精确到年月日
用于LocalDate之间的比较
Duration
包装类就是8种基本数据类型对应的引用类型
为什么提供包装类
Java为了实现一切皆对象,为8种基本类型提供来了对应的引用类型
集合和泛型其实也只能支持包装类型,不支持基本数据类型
自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量
自动拆箱:包装类型的变量可以直接赋值给基本数据类类型的变量
包装类的特有功能
包装类的变量的默认值可以是null,容错率更高
可以把基本类型的数据转换成字符串类型
调用toString() 方法得到字符串结果
调用Integer.toString(基本类型的数据)
可以把字符串类型的数值转换成真是的数据类型
Integer.parseInt(“字符串类型的整数”)
Double.parseDouble(“字符串类型的小数”)
valueOf() 效果一样
正则表达式可以用一些规定的字符来指定规则,并用来校验数据格式的合法性
字符串对象提供了匹配正则表达式规则的API
案例:使用正则表达式完成如下需求
1.便且程序模拟用户输入手机号码,验证格式是否正确,并给出提示,直到格式输入正确为止
2.便且程序模拟用户输入邮箱号码,验证格式是否正确,并给出提示,直到格式输入正确为止
3.便且程序模拟用户输入电话号码,验证格式是否正确,并给出提示,直到格式输入正确为止
正则表达式在字符串方法中的使用
正则表达式爬取信息
数组操作工具类,专门用于处理数组元素
Array类的常用API
自定义排序规则
设置Comparator接口对比的比较器对象,来定制比较规则
如果认为左边数据大于右边数据返回正整数
如果认为左边数据小于右边数据返回负整数
如果认为左边数据等于右边数据返回0
选择排序
每轮选择当前位置,开始找出后面的较小值与该位置交换
二分查找
在数据量特别大的时候,基本查找从前往后寻找的性能是很差的
二分查询性能好,二分查找的前提是必须是排序好的数据
二分查找正常的检索条件应该是开始位置min<= 结束位置max
步骤
定义变量记录左边和右边位置
使用while循环控制查询(条件是左边位置<=右边位置)
循环内部获取中间元素索引
判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
判断当前要找的元素如果等于中间元素,右边位置=中间索引-1
判断当前要找的元素如果等于中间元素,返回当前中间元素索引
Lambda表达式是JDK 8开始后的一种新语法形式
作用:简化匿名内部类的代码写法
Lambda表达式的简化形式
注意:Lambda表达式只能简化函数时接口的匿名内部类的写法形式
首先必须是接口、其次接口中有且仅有一个抽象方法的形式
通常会在接口上加上一个@FunctionalInterface注解,标记该接口满足函数式接口
好处:Lambda是一个匿名函数,可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升
Lambda表达式的省略规则
参数类型可以不写
如果只有一个参数,参数类型可以省略,同时()也可以省略
如果Lambda表达式的方法体代码只有一行,可以省略大括号不写,同时要省略分号
如果Lambda表达式的方法体代码只有一行代码,可以生路大括号不写,此时,如果这行代码是return语句,必须省略return不屑,同时也必须省略分号不写