API:1.Object 2.日期与时间 3.包装类 4.Arrays类
Object
Object类的作用
-
一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
-
Object作为所有类的父类,提供了很多常用的方法给每个子类对象拿来使用
Object类的常用方法
方法名 | 作用 | 存在意义 |
---|---|---|
s.toString() | 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 | 被子类重写,以便返回对象的内容信息,直接输出s.toString()时输出对象的姓名年龄之类的 |
s2.equals(s2) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false | 被子类重写,以便子类自己来定制比较规则(比如比较对象内容),比较从PC端和手机端进入系统的是否为同一个人 |
Objects类的常用方法
-
使用Objects的equals方法在进行对象的比较会更安全,
-
可以避免空指针异常,也就是可以比较null
StringBulider
概述
-
StringBuilder是一个可变的字符串的操作类,我们可以把它看成是一个对象容器
-
操作字符串的性能比String要更高(如拼接、修改等)
常用方法
方法名 | 作用 |
---|---|
sb.append("a").append("b") | 支持链式添加 |
sb.reverse().append("wzy") | 翻转+添加;链式 |
sb.length() | 长度 |
注意
-
StringBulider只是手段工具,我们使用完StringBulider以后还是要把StringBulider类型的变量转换为String类型的
日期与时间
Date类
-
获取此刻具体时间:年月日时分秒星期月份
Date d=new Date();//括号里不填数d就是当前时间 //填数d就是填进去的时间毫秒值所对应的日期
-
从1970年1月1日00:00:00到此刻的总的毫秒值
long time=d.getTime();//不用
long time2=System.currentTimeMillis();//常用
-
把时间毫秒值转为日期对象
Date d2=new Date(time2);
-
日期时间对象不转化成时间毫秒值也能判断时间的先后
SimpleDateFormat类
-
1.格式化输出时间
-
既可以格式化时间也可以直接格式化时间毫秒值
-
先通过SimpleDateFormat这个类的构造器创建出一个对象sdf,在调用它的format方法
-
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); String res = sdf.format(d);
-
y 年
M 月
d 日
H 时
m 分
s 秒
-
2.解析字符串为时间
-
格式必须保持一致
-
String dateStr="2021年08月06日11:11:11"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss"); Date d=sdf.parse(dateStr);
Calender抽象类
注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化
-
抽象类通过类名调用静态方法创建对象cal
-
Calendar cal=Calendar.getInstance();
输出cal会输出它里面包含的所有信息
-
新增时间
1.LocalTime /LocalDate / LocalDateTime
-
新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便
-
新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改
-
新增日期时间可以调他们自己的API只获取年或者月或者星期
-
他们三者构建对象和API都是通用的
-
LocalDate:不包含具体时间的日期
-
LocalTime:不含日期的时间。
-
LocalDateTime:包含了日期及时间。
-
-
以下方法都一样::
-
创建对象方式:类名.静态方法名
-
LocalDate nowDate = LocalDate.now();
-
-
指定日期/时间创建对象
-
LocalDateTime localDateTime=LocalDateTime.of(2003, 9, 14, 5, 21, 34)
-
-
只拿取月份
-
nowDate.getMonthValue()
-
-
LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法
-
可以向下转型
-
LocalDateTime noeDateTime=LocalDateTime.now(); LocalTime lt=noeDateTime.toLocalTime();
-
2.Instant
-
代表的是时间戳
3.DaeTimeFormatter
-
JDK8引入的一个新的日期时间格式化器,
-
功能与SimpleDateFormat一样
-
用法与SimpleDateFormat也一样
4.Duration/Period
-
Duration
-
计算时间间隔
-
Duration duration=Duration.between(brithday,toady);
-
-
Period
-
计算日期间隔,只能精确到日
-
Period period1=Period.between(brithday,today);
-
包装类
-
集合和泛型其实也只能支持包装类型,不支持基本数据类型
-
其实就是8种基本数据类型对应的引用类型
-
char Character
-
int Integer
-
其他都大写首字母
-
自动装箱 /拆箱
-
基本类型的数据和变量可以直接赋值给包装类型的变量
-
包装类型的变量可以直接赋值给基本数据类型的变量。
包装类特有功能
-
可以把字符串类型的数值转换成真实的数据类型
-
Integer.parseInt(“字符串类型的整数”)
-
Double.parseDouble(“字符串类型的小数”)
-
Arrays类
-
数组操作工具类,专门用于操作数组元素的
常用方法
方法名 | 使用示例 | 说明 |
---|---|---|
public static String toString(类型[] a) | Arrays.toString(arr) | 返回数组的内容(字符串形式) |
public static void sort(类型[] a) | Arrays.sort(arr); | 对数组进行默认升序排序 |
public static int binarySearch(int[] a, int key) | Arrays.binarySearch(a,1); | 二分搜索数组中的数据,存在返回索引,不存在返回-1 |
自定义排序方式
-
降序排序
-
Arrays.sort(arr, (o1,o2) -> o1<o2?1:-1);
-
-
排结构体
-
Arrays.sort(arr, (Student o1, Student o2) ->{ return o1.getAge()>o1.getAge()?1:-1; /** * 比较小数 * return Double.compare(o1.height,o2.height) */ });
#
正则表达式
-
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
-
public boolean matches(String regex): 判断是否匹配正则表达式,匹配返回true,不匹配返回false。
字符类
只能校验单个字符
表达式 | 说明 | 示例 |
---|---|---|
[abc] | 只能是a, b, 或c | "a".matches("[abc]") |
[^abc] | 除了a, b, c之外的任何字符 | |
[a-zA-Z] | a到z A到Z,包括(范围) | |
[a-d[m-p]] | a到d,或m通过p:([a-dm-p]联合) | |
[a-z&&[def]] | d, e, 或f(交集) | |
a-z&&[ ^[bc] ] | a到z,除了b和c | |
[a-z&&[ ^m-p ] ] | a到z,除了m到p | |
预定义的字符串类
默认只能校验一个字符
表达式 | 说明 | 示例 | |
---|---|---|---|
\d | 一个数字 | [0-9] | "1".matches("\\d") |
\D | 非数字 | [^0-9] | |
\s | 一个空白字符 | [ \t\n\x0B\f\r] | |
\S : | 非空白字符 | [^\s] | |
\w | 英文、数字、下划线 | [a-zA-Z_0-9] | |
\W | 一个非单词字(汉字) | [^\w] | |
. | 任何字符 |
贪婪的量词
能校验多个:X代表的是前面的预定义字符
表达式 | 说明 | 示例 |
---|---|---|
X* | X,零次或多次 | |
X+ | X , 一次或多次 | |
X {n} | X,正好n次 | |
X {n, } | X,至少n次,(就是必须n位以上) | "123sdf".matches("\\w{6,}") |
X {n,m} | X,至少n但不超过m次 | |
X? | X,一次或者根本不 | |
Lambda表达式
Lambda概述
-
作用:简化匿名内部类的代码写法
-
如果不简化,我们需要创建一个实现类来实现接口的,并重写这个实现类里面的抽象方法,最后创建这个实现类的对象来调用这个方法
-
一旦重写:不用创建实现类,直接重写方法,不用创建实现类的对象,直接创建接口的”对象“,通过这个对象,反过来调用重写的方法
-
-
格式
-
(匿名内部类被重写方法的形参列表) -> { 被重写方法的方法体代码。 }
-
-
注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式
-
函数式接口:l首先必须是接口、其次接口中有且仅有一个抽象方法的形式
-
函数式接口上都有一个@FunctionalInterface注解
-
省略规则
-
参数类型可以省略不写
-
如果只有一个参数,参数类型可以省略,同时()也可以省略
-
l方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
-
方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写