常用API、Lambda
1. 日期与时间
Date
-
Date构造器
public Date()创建一个Date对象,代表的是系统当前此刻日期时间。
-
常用方法
public long getTime()获取时间对象的毫秒值
SimpleDateFormat
- 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式
- 也可以把字符串的时间形式解析成日期对象。
public static void main(String[] args) {
// 1、日期对象
Date d = new Date();
System.out.println(d);
// 2、格式化这个日期对象 (指定最终格式化的形式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
// 3、开始格式化日期对象成为喜欢的字符串形式
String rs = sdf.format(d);
System.out.println(rs);
System.out.println("----------------------------");
// 4、格式化时间毫秒值
// 需求:请问121秒后的时间是多少
long time1 = System.currentTimeMillis() + 121 * 1000;
String rs2 = sdf.format(time1);
System.out.println(rs2);
System.out.println("------------解析字符串时间,下个代码---------------");
}
public static void main(String[] args) throws ParseException {
// 目标: 学会使用SimpleDateFormat解析字符串时间成为日期对象。
// 有一个时间 2021年08月06日 11:11:11 往后 2天 14小时 49分 06秒后的时间是多少。
// 1、把字符串时间拿到程序中来
String dateStr = "2021年08月06日 11:11:11";
// 2、把字符串时间解析成日期对象(本节的重点):形式必须与被解析时间的形式完全一样,否则运行时解析报错!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = sdf.parse(dateStr);
// 3、往后走2天 14小时 49分 06秒
long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6) * 1000;
// 4、格式化这个时间毫秒值就是结果
System.out.println(sdf.format(time));
}
JDK8新增日期类
-
LocalDate:日期
-
LocalTime:时间。
-
LocalDateTime:包含了日期及时间。
构建对象的方式如下
LocalDate、LocalTime、LocalDateTime获取信息的API.
转换相关的API
修改相关的API
-
Instant:时间戳。
-
DateTimeFormatter 用于做时间的格式化和解析的
-
正反都能调用format方法。
LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt);//2021-03-01T15:09:17.444190900 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String ldtStr = ldt.format(dtf); System.out.println(ldtStr);//2021-03-01 15:09:17 String ldtStr1 = dtf.format(ldt); System.out.println(ldtStr1);//2021-03-01 15:09:17
-
-
Duration:用于计算两个“时间”间隔
-
用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较
LocalDateTime today = LocalDateTime.now(); System.out.println(today); LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30); System.out.println(birthDate); Duration duration = Duration.between(birthDate, today);//第二个参数减第一个参数 System.out.println(duration.toDays());//两个时间差的天数 System.out.println(duration.toHours());//两个时间差的小时数 System.out.println(duration.toMinutes());//两个时间差的分钟数 System.out.println(duration.toMillis());//两个时间差的毫秒数 System.out.println(duration.toNanos());//两个时间差的纳秒数
-
-
Period:用于计算两个“日期”间隔
-
用于 LocalDate 之间的比较。
LocalDate today = LocalDate.now(); System.out.println(today); // 2021-03-01 LocalDate birthDate = LocalDate.of(1995, 1, 11); System.out.println(birthDate); // 1995-01-11 Period period = Period.between(birthDate, today); System.out.printf("年龄 : %d 年 %d 月 %d 日", period.getYears(), period.getMonths(), period.getDays());
-
包装类
-
概述:其实就是8种基本数据类型对应的引用类型。
-
为什么要提供包装类
- Java为了实现一切皆对象
- 集合和泛型其实也只能支持包装类型,不支持基本数据类型
正则表达式
-
概述:用一些规定的字符来制定规则,并用来校验数据格式的合法性。
-
匹配规则:
字符类(默认匹配一个字符):匹配规则 说明 [abc] 只能是a, b, 或c [^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:([ad-z]减法) 预定义的字符类(默认匹配一个字符)
匹配规则 说明 . 任何字符 \d 一个数字: [0-9] \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 , 一次或多次 X{n} X,正好n次 X{n, } X,至少n次 X{n,m} X,至少n但不超过m次 public boolean matches(String regex): 判断是否匹配正则表达式,匹配返回true,不匹配返回
System.out.println("a".matches("[abc]")); // true System.out.println("z".matches("[abc]")); // false System.out.println("ab".matches("[abc]")); // false System.out.println("ab".matches("[abc]+")); //true
Arrays类
-
概述:数组操作工具类,专门用于操作数组元素的。
-
Arrays类的常用API
方法 说明 public static String toString(类型[] a) 对数组进行排序 public static void sort(类型[] a) 对数组进行默认升序排序 public static void sort(类型[] a, Comparator<? super T> c) 使用比较器对象自定义排序 public static int binarySearch(int[] a, int key) 二分搜索数组中的数据,存在返回索引,不存在返回-1 方法实现代码:
public static void main(String[] args) { // 目标:学会使用Arrays类的常用API ,并理解其原理 int[] arr = {10, 2, 55, 23, 24, 100}; System.out.println(arr); // 1、返回数组内容的 toString(数组) // String rs = Arrays.toString(arr); // System.out.println(rs); System.out.println(Arrays.toString(arr)); // 2、排序的API(默认自动对数组元素进行升序排序) Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 3、二分搜索技术(前提数组必须排好序才支持,否则出bug) int index = Arrays.binarySearch(arr, 55); System.out.println(index); // 返回不存在元素的规律: - (应该插入的位置索引 + 1) int index2 = Arrays.binarySearch(arr, 22); System.out.println(index2); // 注意:数组如果么有排好序,可能会找不到存在的元素,从而出现bug!! int[] arr2 = {12, 36, 34, 25 , 13, 24, 234, 100}; System.out.println(Arrays.binarySearch(arr2 , 36)); }自定义比较规则
Arrays.sort(ages1, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // 指定比较规则。 // if(o1 > o2){ // return 1; // }else if(o1 < o2){ // return -1; // } // return 0; // return o1 - o2; // 默认升序 return o2 - o1; // 降序 } });
Lambda
-
作用:简化匿名内部类的代码写法。
-
格式:
(匿名内部类被重写方法的形参列表) -> { 被重写方法的方法体代码。 } 注:-> 是语法形式,无实际含义 -> 首先必须是接口、其次接口中有且仅有一个抽象方法的形式