Java:(学习笔记)五、常用API与补充语法

第六章—常用API与补充语法

一、Java API概述

API ( Application Programming Interface )应用程序编程接口 ,是对java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明. 简单来说,就是Java帮我们已经写好的一些方法,我们直接拿过来用就可以了。

二、Object

1、说明

​ Object类的方法是一切子类对象都可以直接使用的,一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。

2、常用方法

方法名说明
public String toString()默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
public boolean equals(Object o)默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false

3、toString方法

​ 开发中直接输出对象,默认输出对象的地址其实是毫无意义的,更多的时候是希望看到对象的内容数据而不是对象的地址信息。

​ 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。

​ 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息

4、equals方法

​ 没有被重写的时候,默认比较的是两个对象的地址,所以 “ == ” 与 equals 的作用重复了。

​ 父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。

三、Objects

1、说明

​ Objects是一个工具类,提供了一些方法去完成一些功能。使用Objects的equals方法在进行对象的比较会更安全。

2、常用方法

方法名说明
public static boolean equals(Object a, Object b)比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较
public static boolean isNull(Object obj)判断变量是否为null ,为null返回true ,反之

四、StringBuilder

1、说明

​ StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。

​ 作用:提高字符串的操作效率,如拼接、修改等。

2、StringBuilder构造器

名称说明
public StringBuilder()创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str)创建一个指定字符串内容的可变字符串对象

3、常用方法

方法名称说明
public StringBuilder append(任意类型)添加数据并返回StringBuilder对象本身
public StringBuilder reverse()将对象的内容反转
public int length()返回对象内容长度
public String toString()通过toString()就可以实现把StringBuilder转换为String

4、String与StringBuilder比较

​ String :内容是不可变的、拼接字符串性能差。

​ StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。

​ 定义字符串使用String;拼接、修改等操作字符串使用StringBuilder

五、Math

1、说明

​ 包含执行基本数字运算的方法,Math类没有提供公开的构造器。如果类的成员是否都是静态的,,通过类名就可以直接调用

2、常用方法

方法名说明
public static int abs(int a)获取参数绝对值
public static double ceil(double a)向上取整
public static double floor(double a)向下取整
public static int round(float a)四舍五入
public static int max(int a,int b)获取两个int值中的较大值
public static double pow(double a,double b)返回a的b次幂的值
public static double random()返回值为double的随机值,范围[0.0,1.0)

六、System

1、说明

​ System也是一个工具类,代表了当前系统,提供了一些与系统相关的方法。

2、常用方法

方法名说明
public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
public static long currentTimeMillis()返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数)数组拷贝

:计算机认为时间是有起点的,起始时间: 1970年1月1日 00:00:00。时间毫秒值:指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,

七、BigDecimal

1、说明

​ 用于解决浮点型运算精度失真的问题

2、使用

​ 创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)

//包装浮点数成为BigDecimal对象。
public static BigDecimal valueOf(double val); 

3、常用方法

方法名说明
public BigDecimal add(BigDecimal b)加法
public BigDecimal subtract(BigDecimal b)减法
public BigDecimal multiply(BigDecimal b)乘法
public BigDecimal divide(BigDecimal b)除法
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)除法

八、日期与时间

1、Date

1)说明

​ Date类代表当前所在系统的日期时间信息。

2)构造器

名称说明
public Date()创建一个Date对象,代表的是系统当前此刻日期时间。
public Date(long time)把时间毫秒值转换成Date日期对象。

3)常用方法

名称说明
public long getTime()返回从1970年1月1日 00:00:00走到此刻的总的毫秒数
public void setTime(long time)设置日期对象的时间为当前时间毫秒值对应的时间

2、SimpleDateFormat

1)说明

​ 可以去完成日期时间的格式化操作

2)构造器

构造器说明
public SimpleDateFormat(String pattern)构造一个SimpleDateFormat,使用指定的格式

3)常用方法

方法说明
public final String format(Date date)将日期格式化成日期/时间字符串
public final String format(Object time)将时间毫秒值式化成日期/时间字符串
public Date parse(String source)从给定字符串的开始解析文本以生成日期

4)格式化的时间形式的常用的模式对应关系

yMdHms

举例:

2020-11-11 13:27:06 —— yyyy-MM-dd HH:mm:ss

2020年11月11日 13:27:06 —— yyyy年MM月dd日 HH:mm:ss

3、Calendar

1)说明

​ Calendar代表了系统此刻日期对应的日历对象。

​ Calendar是一个抽象类,不能直接创建对象。

2)常用方法

public int get(int field)取日期中的某个字段信息。
public static Calendar getInstance()获取当前日历对象
public void set(int field,int value)修改日历的某个字段信息。
public void add(int field,int amount)为某个字段增加/减少指定的值
public final Date getTime()拿到此刻日期对象。
public long getTimeInMillis()拿到此刻时间毫秒值

​ 注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化。

4、JDK8新增日期类

1)新增日期和时间API说明
新增日期和时间API说明
LocalDate不包含具体时间的日期。
LocalTime不含日期的时间。
LocalDateTime包含了日期及时间。
Instant代表的是时间戳。
DateTimeFormatter用于做时间的格式化和解析的
Duration用于计算两个“时间”间隔
Period用于计算两个“日期”间隔

​ 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。

2)LocalDate、LocalTime、LocalDateTime

①说明

​ 他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。他们三者构建对象和API都是通用的

②方法

方法名说明
public static Xxxx now();静态方法,根据当前时间创建对象LocaDate localDate = LocalDate.now();
LocalTime llocalTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
public static Xxxx of(…);静态方法,指定日期/时间创建对象LocalDate localDate1 = LocalDate.of(2099 , 11,11);
LocalTime localTime1 = LocalTime.of(11, 11, 11);
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);
public int geYear()获取年
public int getMonthValue()获取月份(1-12)
Public int getDayOfMonth()获取月中第几天
Public int getDayOfYear()获取年中第几天
Public DayOfWeek getDayOfWeek()获取星期

③LocalDateTime的转换API

方法名说明
public LocalDate toLocalDate()转换成一个LocalDate对象
public LocalTime toLocalTime()转换成一个LocalTime对象

④修改API

方法名说明
plusDays, plusWeeks, plusMonths, plusYears向当前 LocalDate 对象添加几天、 几周、几个月、几年
minusDays, minusWeeks, minusMonths, minusYears从当前 LocalDate 对象减去几天、 几周、几个月、几年
withDayOfMonth, withDayOfYear, withMonth, withYear将月份天数、年份天数、月份、年 份 修 改 为 指 定 的 值 并 返 回 新 的 LocalDate 对象
isBefore, isAfter比较两个 LocalDate

注:LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。

3)Instant

​ Instant类由一个静态的工厂方法now()可以返回当前时间戳。

​ 时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。

​ Instant和Date这两个类可以进行转换。

Instant instant = Instant.now();
System.out.println("当前时间戳是:" + instant);

Date date = Date.from(instant);
System.out.println("当前时间戳是:" + date);

instant = date.toInstant();
System.out.println(instant);
4)DateTimeFormatter

​ 一个全新的日期与时间格式器DateTimeFormatter。正反都能调用format方法。

LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
//2022-02-12T10:45:02.485

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String ldtStr = ldt.format(dtf);
System.out.println(ldtStr);
//2022-02-12 10:45:02

String ldtStr1 = dtf.format(ldt);
System.out.println(ldtStr1);
//2022-02-12 10:45:02
5)Period

​ 计算日期间隔差异,主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。
用于 LocalDate 之间的比较。

LocalDate today = LocalDate.now();
System.out.println(today);     
// 2022-02-12

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());
// 年龄 : 27 年 1 月 1 日
6)Duration

​ 计算时间间隔差异,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());//两个时间差的纳秒数

/*
2022-02-12T10:54:11.830
1990-10-01T10:50:30
11457
274968
16498083
989885021830
989885021830000000
*/
7)ChronoUnit

​ ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位

LocalDateTime today = LocalDateTime.now();
System.out.println(today);
LocalDateTime birthDate = LocalDateTime.of(1990,10,1,10,50,30);
System.out.println(birthDate);

System.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));
System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));
System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));
System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));
System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));
System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));
System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));
System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));
System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));
System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));

System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));
System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));
System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));
System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));
System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));

/*
2022-02-12T10:53:39.171
1990-10-01T10:50:30
相差的年数:31
相差的月数:376
相差的周数:1636
相差的天数:11457
相差的时数:274968
相差的分数:16498083
相差的秒数:989884989
相差的毫秒数:989884989171
相差的微秒数:989884989171000
相差的纳秒数:989884989171000000
相差的半天数:22914
相差的十年数:3
相差的世纪(百年)数:0
相差的千年数:0
相差的纪元数:0
*/

九、包装类

1、说明

​ 包装类就是8中基本数据类型对应的引用类型。

​ Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。集合和泛型只能支持包装类型,不支持基本数据类型。

基本数据类型引用数据类型
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

2、自动装箱与自动拆箱

1)自动装箱

​ 基本类型的数据和变量可以直接赋值给包装类型的变量。

2)自动拆箱

​ 包装类型的变量可以直接赋值给基本数据类型的变量。

3)包装类的特有功能

​ ①包装类的变量的默认值可以是null,容错率更高。

​ ②把基本类型的数据转换成字符串类型。调用 toString() 方法得到字符串结果 与 调用 Integer.toString (基本类型的数据)作用一致。

​ ③把字符串类型的数值转换成真实的数据类型。Integer.parseInt(“字符串类型的整数”)、Double.parseDouble(“字符串类型的小数”)。

十、正则表达式

1、说明

​ 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

2、规则

1)字符类(默认匹配一个字符)

正则表达式说明
[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:
[a-z&&[^m-p]]a到z,除了m到p:([a-lq-z]减法)

2)预定义的字符类(默认匹配一个字符)

正则表达式说明
.任何字符
\d一个数字: [0-9]
\D非数字: [^0-9]
\s一个空白字符: [ \t\n\x0B\f\r]
\S非空白字符: [^\s]
\w[a-zA-Z_0-9] 英文、数字、下划线
\W[^\w] 一个非单词字符

3)贪婪的两次(配合匹配多个字符)

正则表达式说明
X?X ,一次或根本不
X*X ,零次或多次
X+X ,一次或多次
X {n}X ,正好n次
X {n, }X ,至少n次
X {n,m}X ,至少n但不超过m次

4)举例

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

3、应用

方法名说明
public String replaceAll(String regex,String newStr)按照正则表达式匹配的内容进行替换
public String[] split(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

十一、Arrays类

1、说明

​ 数组操作工具类,专门用于操作数组元素的。

2、常用方法

方法名说明
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

3、自定义排序规则

​ 设置Comparator接口对应的比较器对象,来定制比较规则。

​ 如果认为左边数据 大于 右边数据 返回正整数

​ 如果认为左边数据 小于 右边数据 返回负整数

​ 如果认为左边数据 等于 右边数据 返回0

/**
 * student  表示待排序的数组
 * new Comparator<Student>(Student) 表示Comparator接口对应的比较器对象,来定制比较规则。
 * return o1.getAge() - o2.getAge();    表示依照年龄升序,返回(对象o1的年龄 减去 对象o2的年龄)
 */
Arrays.sort(students, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
		//自己指定比较规则
		return o1.getAge() - o2.getAge();
	}
});

十二、Lambda表达式

1、说明

​ Lambda表达式是JDK 8开始后的一种新语法形式。是为了简化匿名内部类的代码写法。

2、格式

(匿名内部类被重写方法的形参列表) -> {
    被重写方法的方法体代码。
}
//注:-> 是语法形式,无实际含义

​ 注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式。必须是接口的匿名内部类,接口中只能有一个抽象方法。

3、简化

1)Lambda表达式的省略写法(进一步在Lambda表达式的基础上继续简化)

​ ①参数类型可以省略不写。

​ ②如果只有一个参数,参数类型可以省略,同时()也可以省略。

​ ③如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!

​ ④如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写

2)简化举例一:多参数

​ ①正常写法

Arrays.sort(students, new Comparator<Student>() {
	@Override
	public int compare(Student o1, Student o2) {
		return o1.getAge() - o2.getAge();
	}
});

​ ②简化为匿名形式

Arrays.sort(students, (Student o1, Student o2) -> {
	return o1.getAge() - o2.getAge();
});

​ ③省略参数类型

Arrays.sort(students, (o1, o2) -> {
	return o1.getAge() - o2.getAge();
});

3)简化举例二:单参数

​ ①正常写法

JButton btn = new JButton("登录");

btn.addActionListener(new ActionListener() {
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("登录");
	}
});

②简化为匿名形式

JButton btn = new JButton("登录");

Arrays.sort(students, (Student o1, Student o2) -> {
	return o1.getAge() - o2.getAge();
});

③省略参数类型和小括号

JButton btn = new JButton("登录");

btn.addActionListener( e -> {
            System.out.println("登录");
        });

④省略大括号和分号

JButton btn = new JButton("登录");

btn.addActionListener( e -> System.out.println("登录") );

Java笔记系列

Java:(学习笔记)一、简介

Java:(学习笔记)二、基础语法

Java:(学习笔记)三、面向对象-基础

Java:(学习笔记)四、面向对象-三大基本特征

Java:(学习笔记)五、常用API与补充语法

Java:(学习笔记)六、集合

Java:(学习笔记)七、Stream流、异常、日志框架

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值