常用类(String、Date)
- String类:代表字符串
一.是一个final类,具有不可变性。
二.具有哈希值
三.内部实现了Serialization接口,表示字符串支持序列化
实现了Comparable接口,表示String可以比较大小
*关于字符串不可变性的理解:字符串字面量保存在方法区常量池中,常量池不会保存相同值的字面量,如果两个String字面量相同,那么地址就是同一个;对字符串进行拼接操作时,会在常量池中重新声明一个字面量,与拼接前的字面量不同,用replace结果也相同
*创建:可以直接赋字面量(存在方法区中),也可以new(存在堆中,堆中的value调用的是常量池中的字面量),当拼接操作中存在变量名时,它的值会在堆空间中去开辟,相当于new;调用intern方法,要求字面值在常量池中声明
*String的类型转换:调用包装类的静态方法;调用String重载的valueOf();与byte之间的转换靠String中的getbyte方法和String本身的构造器(编码与解码,注意使用的编码集和Java默认编码集之间可能存在不同)
*如果空String接收的参数的内容是null,数组接收后并不为空,而是产生长度为4的字符串存储“null”
2.可变的字符序列:(底层皆为char数组存储)
一.StringBuffer:线程安全,含同步方法,效率较低
常见一个默认容量为16的数组,如果在一开始带上初始值,那么会创建一个初始值长度再加上16的大小的数组。在之后拼接新元素时,字符串不会再新建一个,而是直接在原字符串上加入新元素
*返回长度时返回数组中实际字符串长度
*数组不够用时会自动扩容,长度扩大为两倍再加二,使用时尽量避免扩容,建议在一开始就指定长度
*StringBuffer下大部分方法的表现类似于String的+符
二.StringBuilder:费线程安全,但效率较高
其主要特性基本与StringBuilder相同
*关于三者效率之间的对比,StringBuffer效率低于StringBuilder,String的效率显著低于前两者
3.关于时间的方法:
Java.lang.System下的currentTimeMillis用来返回毫秒数,long型变量。毫秒数可以称作时间戳
Java.util.Data类:1)创建空参Date对象,toString():显示年、月、日、时、分、秒
2)创建空参Date对象,getTime():显示毫秒数
3)创建毫秒数对象,toString():将毫秒数转化为年月日
Java.sql.Data类:与数据库交互时使用,创建格式:new java.sql.Date
*如何将Date强转为java.sql.Date:使用Date下的方法getTime()先转化为毫秒数
SimpleDateFormat的使用:对Date的格式化和解析
格式化:new一个Date,使用format方法转化为字符串
解析:SimpleDateFormat的parse方法将字符串转化为时间,对字符串格式有要求,需要与格式化显示的时间格式相同;或者不使用默认构造器,自己进行定义,但无论如何格式化与解析需要保持相同格式
Calendar日历类的使用(抽象类,无法实例化)
实例化:方式一:创建子类对象GregorianCalendar的对象
方式二:调用静态方法getInstance(),实质上任然调用了子类
*获取月份时,一月为0,十二月为11,周日是1,周六是7。
*Calendar的数值是可变的,可以进行计算。
*Calendar存在偏移量,如一月用零表示等等
LoccalDate、LocalTime、LocalDateTime:(在Java.time包中)
LocalDate:年月日;LocalTime:时分秒毫秒;LocalDateTime:年月日时分秒毫秒。
使用:now获取当前时间,of对时间进行预定义
*无偏移量,且具有不可变性
Instant瞬时类:类似于Date类。
DateTimeFormatter:用于格式化和解析日期时间,用于取代SimpleDateFormat,支持自定义
*解析时由于不确定Date、Time等调用的类的种类,所以以接口的方式造对象 TemporalAccessor
4.Java比较器:对对象进行大小的比较,正常情况下,对象比较只能使用==和!=,不能使用>或<号。
Comparable接口:重写compareTo方法,this与形参对象比较,规则为this大返回正数,this小于形参对象返回负数,等于返回零;默认从小到大排(自然排序)
Comparatar接口:Comparable接口实现的结果不适于当前方式,需要自定义一种排序方式,接口内部使用泛型实现功能(定制排序)
5.System类:存放系统级的诸多属性与控制方法,构造器类型为private,故无法创建该类的对象,无法实例化。内部所有成员变量和成员方法都是static的。
三个属性:err、in、out,流相关的操作
成员方法:exit(),退出,0为正常退出,非零表示不正常
gc()请求系统垃圾回收,具体的回收看系统的运行情况(多线程)
6.BigInteger类:Math包下,用于高精度整数计算
7.BigDecimal类:Math包下,用于高精度浮点数计算,默认三位小数,但可以自由指定小数位数。