Java常用类

在这里插入图片描述
在这里插入图片描述

字符串相关的类

String

一.特性

  • String:字符串,使用一对""引起来表示。
  • String声明为final的,不可被继承。
  • String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小。
  • String内部定义了final char[] value用于存储字符串数据。
  • String:代表不可变的字符序列。简称:不可变性
    体现:当对字符串重新赋值时,当对现有的字符串进行连接操作时,当调用String的replace()方法修改指定的字符或字符串时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
  • 通过字面量的方式(区别于new)给一个字符赋值,此时的字符串值声明在字符串常量池中。
  • 字符串常量池中是不会存储相同内容的字符串
  • String的实例化方式
    方式一:通过字面量定义的方式 (声明在方法区中的字符串常量池里)
    方式二:通过new+构造器的方式 (对象保存的地址值是数据在堆空间中开辟空间以后对应的地址值)

结论
1.常量和常量的拼接结果在常量池,且常量池不会存在相同内容的常量。

2.只要其中一个是常量,结果就在堆中。

3.如果拼接的结果调用了intern()方法,返回值在常量池中

面试题:String s = new String(“abc”)方式创建对象,在内存中创建了几个对象?
A:两个。一个是堆空间中new结构,另一个是char[]对应的常量池的数据:“abc”。

二.常用方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.之间的转换

String与char[]之间的转换

  • String -----> char[]:调用String的ToCharArray()
  • char[] -----> String:调用String的构造器

String与byte[]之间的转换

  • 编码(看得懂 -----> 看不懂的二进制数据):String -----> byte[]:调用String的getBytes()
  • 解码(看不懂的二进制数据 -----> 看得懂):byte[] -----> String:调用String的构造器
  • ps:解码时,要求解码使用的字符集必须与编码使用的字符集一致,不然会出现乱码。

StringBuffer和StringBuilder

一.异同

String:不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;(JDK5.0新增的)线程不安全,但效率高;底层使用char[]存储

扩容问题:如果要添加的数组底层盛不下了,那就需要扩容底层的数组。默认情况下,扩容到原来容量的2倍+2,同时将原有的数组元素复制到新的数组中。

效率的对比
从高到低:StringBuilder > StringBuffer > String

二.常用方法

在这里插入图片描述
在这里插入图片描述

JDK8之前的日期时间API

System类

在这里插入图片描述

Date类

在这里插入图片描述
1.两个构造器的使用

  • Date():创建一个对应当前时间的Date对象
  • Date(long date):创建指定毫秒数的Date对象

2.两个方法的使用

  • toString():显示当前的年月日时分秒
  • getTime():获取当前对象对应的毫秒数(时间戳)

3.java.sql.Date对应着数据库中的日期类型的变量

  • 如何实例化
  • 如何将java.util.Date对象转换成java.sql.Date对象
    在这里插入图片描述

SimpleDateFormat类

一.两个操作

1.格式化

日期 --------> 字符串
(按照指定的格式进行格式化和解析:调用带参的构造器

2.解析(格式化的逆过程)

字符串 --------> 日期
解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器识别),否则会抛异常。

二.课后习题

1.将字符串"2020-08-17"转换成java.sql.Date
import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatTest {
    @Test
    public void testExer() throws ParseException {
        String birth = "2020-08-17";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf1.parse(birth);
        java.sql.Date birthDate = new java.sql.Date(date.getTime());
        System.out.println(birthDate);
    }
}
2.“三天打鱼两天晒网” 从date1:1990-01-01开始,问xxxx-xx-xx是在晒网还是打渔?

举例date2:2020-08-09 分析
总天数%5 == 1,2,3则是打渔

总天数%5 == 4,0则是晒网

总天数的计算
①先换成毫秒数,相减后转换成天数
(date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24) + 1

②直接算天数

Calendar类

一.实例化

1.创建其子类(GregorianCalendar)的对象
2.调用其静态方法getInstance()

二.常用方法

  • get()
  • set()
  • add()
  • getTime():日历类 -------> Date
  • setTime():Date -------> 日历类

JDK8中新日期时间API

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LocalDate LocalTime LocalDateTime

类似于Calendar
在这里插入图片描述

  • now():获取当前的日期,时间,日期 + 时间
  • of():获取指定的年月日时分秒,没有偏移量
  • getXxx():获取相关的属性
  • withXxx():设置相关的属性

LocalDateTime相较于其他两个使用频率更高

Instant

类似于java.util.Date类
在这里插入图片描述
now():获取本初子午线对应的标准时间

DateTimeFormatter类

类似于SimpleDateFormat
在这里插入图片描述
格式化:日期 -------> 字符串
解析:字符串 ----------> 日期

其他类

在这里插入图片描述
在这里插入图片描述

Java比较器

Java中的对象,在正常情况下,只能进行比较:==或 !=,不能使用> 或 <,但是在开发场景下,我们需要对多个对象进行排序,言外之意,就是要比较对象的大小。如何实现,就要使用两个接口中的任何一个:Comparable, Comparator

Comparable接口(自然排序)

1.像String,包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方法。

2.像String,包装类重写了compareTo(obj)方法以后,进行了从小到大的排列。

3.重写compareTo(obj)方法的规则
在这里插入图片描述
4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序

Comparator接口

在这里插入图片描述
两者的对比
Comparable接口的方式一旦指定,保证Comparable接口实现类的对象在任何位置都可以比较大小。而Comparator接口属于临时类的比较。

System类

在这里插入图片描述
在这里插入图片描述

Math类

在这里插入图片描述

BigInteger BigDecimal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值