Java基础04--Object-Objects-包装类-StringBuilder-StringJoiner-Math-BigDecimal-时间-Arrays-Lambda-方法引用

一、常用API

Java已经写好的一些程序,可以直接解决问题

1.Object

所有类的祖宗类,所有类可以使用它的方法

①toString()

对象调用此方法的时候,等同于就是使用对象,默认会执行此方法,不重写就是对象的地址。

②equals()

不重写默认比较的是两者的地址,在类中输入equ回车就会自动生成

③clone()

当使用这个方法时会返回一摸一样的对象。因为它在Object中是protected的所以想要使用必须在类中重写,并且实现Cloneable接口。
--Cloneable接口是一个标记接口,就是规则,代表有clone的能力。

a.浅克隆

拷贝的新对象,与元对象中的数据一摸一样(引用类型拷贝的只是地址)

b.深拷贝

对象中基本类型的数据直接拷贝。
对象中的字符串数据拷贝的还是地址。
对象中还包含的其他对象,不会拷贝地址,会创建新对象。

实现方法:
可以为其他对象在重写克隆方法中单独书写
例如:克隆数组

2.Objects

静态类,提供了很多操作对象的静态方法

①equals(Object a, Object b)

不使用类重写的equals方法是因为,如果对象为空,去调用它的equals方法就会出现错误
更安全,更好的

②isNull、nonNull

与=作用一样

3.包装类

把基本类型的数据包装成对象

①Interger

将基本类型转换为对象

自动拆装箱,可以自动将基本类型的数据转换成对象或者将对象转换为基本类型

--这样就可以在Arraylist等泛型中使用基本类型了

②包装类的其他操作

将基本类型的数据转换成字符串类型

但更多使用:

把字符串类型转换成数值本身的数据:

但更多使用:

4.StringBulder与StringBuffer

StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可变的,就是用来操作字符串的。

好处:StringBuilder比String更适合做字符串的修改操作,效率会更高,代码更简洁

对于append,可以拼接内容:

为什么使用StringBuilder不用String

StringBuffer

很多人同时一起用StringBuilder就会出问题

5.StringJoiner

有些场景下,StringBuilder代码麻烦
--JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可变的。
--好处:不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁

它可以在定义的时候添加拼接间隔符,开始符号和结束符号。

6.Math、System、Runtime-了解

①math

代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法

②System

System代表程序所在的系统,也是一个工具类

第二条可以进行性能分析

③Runtime

代表程序所在的运行环境;Runtime是一个单例类。

7.BigDecimal

用于解决浮点型运算时,出现结果失真的情况

使用valueOf,把小数转换成字符串再转成BigDecimal

8.JDK9之前的传统的日期和时间-看以前项目

①date

代表的是日期和时间

②SimpleDateFormat

代表简单日期格式化,将时间日期格式成我们想要的形式

String pattern中的常见符号

如果传输的是字符串时间--创建的简单格式化对象中Pattern格式要与字符串一致

③Calendar

为什么要用它

Calendar代表的是系统此刻时间对应的日历
通过它可以单独获取、修改时间中的年、月、日、时、分、秒等

9.JDK8之后新增的时间-自己做推荐

①LocalDate、LocalTime、LocalDateTime

他们是不可变对象,对其进行修改会创建新的对象

LocalTime和LocalDateTime与LocalDate应用是一样的,范围不一样

三者的相互转换:

②ZoneID、ZoneDateTime

ZoneID代表时区ID
ZoneDateTime代表带时区的时间

③Instant

时间线上的某个时刻
--通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00开始走到此刻的总秒数+不够1秒的纳秒数

作用:做代码分析,或者记录用户操作的时间点

④DateTimeFormatter

SimpleDateFormat,线程不安全,多个用户进入系统调用其,会出现错误

--拿时间去格式化器中格式化

--拿格式化器拿去时间中格式化:

解析时间--字符串时间,格式化器

⑤Period、Duration

Period:可以用于计算两个LocalDate对象相差的年数、月数、天数

Duration:可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、Instant等时间。

在方法后加个part,toHoursPart,会返回24小时内的差多少小时。

⑥timer类

是一个每隔多少时间做操作的类

TimeTask要继承TimerTask,并且重写run方法。

10.Arrays-为熟悉Lambda打基础

用来操作数组的工具类

对于第三条,它会创建一个匿名内部类,来对原数据进行操作,依次遍历数组的元素

对于第四条,排序,如果数组存储的是对象,它不能直接进行排序
若想自定义排序方法:

对于方式一,由于sort方法是调用compareTo方法进行比较再排序,所以让存储的对象那个类实现Comparable接口,再重写compareTo方法。
约定规则:

  1. 约定1:认为左边对象大于右边对象请您返回正整数
  2. 约定2:认为左边对象小于右边对象请您返回负整数
  3. 约定3:认为左边对象等于右边对象请您一定返回0

 

对于方式二,在使用sort方法时添加一个参数为匿名内部类,Comparator,在其内制定规则
约定规则与方法一相同:

11.JDK8新特性:Lambda表达式

①认识Lambda表达式

Lambda表达式是JDK 8开始新增的一种语法形式;作用:用于简化匿名内部类的代码写法。

注意:未来遇到的大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。 

前提条件:只能简化函数式接口的匿名内部类,有且仅有一个抽样方法的接口

②Lambda简化规则

层层简化:

12.JDK8新特性:方法引用

进一步简化Lambda表达式

①静态方法的引用

格式:类名::静态方法

使用场景:如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。

前提是有个类中有此静态方法。前后参数一致指的是匿名内部类中的参数和该类中的静态方法的参数一致。

②实例方法的引用

格式:类名::实例方法

使用场景:如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。

③特定类型方法的引用

格式:类名::方法

使用场景:如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用

蓝色字的意思理解:就是说在String类中的compareToIgnoreCase方法中参数只有一个,与前面参数不一致,但是compareToIgnoreCase方法使用时前面的第一个参数.这个方法:主调。且传的参数是第二个参数:入参。

④构造器引用

格式:类名::new

使用场景:如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值