13 可变字符串类和日期相关类

243 阅读5分钟

01 可变字符串类

String类字符串的内容是不可改变的的,当需要在java代码中描述大量类似的字符串时,只能为每个字符串单独申请内存空间,这会造成内存空间的浪费。

为了解决上面的问题,java引入了StringBuilder和StringBuffer类来描述可以改变字符序列的字符串,两者之间的区别在于:StringBuffer类从jdk1.0开始存在,属于线程安全的类,因此效率低;StringBuilder类从jdk1.5开始存在,是非线程安全的类,因此效率高。

由于StringBuilder比StringBuffer效率要高些,因此在实际开发中用的也更多,下面就以StringBuilder为例展开介绍:

StringBuilder类的常用构造方法:

方法声明功能描述
StringBuilder()使用无参方式构造对象,容量为16
StringBuilder( int capacity)根据参数指定的容量大小来构造对象,容量为参数指定
StringBuilder( String str)根据参数指定的字符串来构造对象,容量为:16+字符串长度

StringBuilder类的常用成员方法:

方法声明功能介绍
int capacity()返回调用对象容量大小
int length()返回字符串长度
StringBuilder insert( int offset,String str )在参数指定位置插入字符串并返回调用对象的引用
StringBuilder append(String str)在字符串末尾添加参数指定字符串并返回调用对象的引用
StringBuilder deleteCharAt( int index)将字符串中下标为index的字符删除
StringBuilder delete(int start,int end)将参数指定范围的字符串删除
StringBuilder replace(int start,int end,String str)替换参数范围内字符串替换为指定参数字符串的内容
StringBuilder reverse()字符串反转

注意:作为参数传递时,方法内部String不会改变其值,但StringBuffer和StringBuilder会改变

这里有个问题就是StringBuilder类中很多成员方法都有类型为StringBuilder的返回值,返回语句都是return this,按理来说通过成员方法对字符串的内容进行操作,其实一直就是对同一字符串进行操作,这是与String类字符串相反的,因为String类字符串时不可改变的,所以每次操作都会生成新的对象,而StringBuilder却不用,那为何返回值还是要设计成返回自己本身。

解释:StringBuilder返回值的设计为返回本身的引用,这样设计的目的是为了可以连续调用成员方法,例如str.append("adc").replace(0,2,"qw"),当返回值不设计成返回本身的引用,那么上面的语句就要分开写成两个语句,当操作多起来后,会显得很繁琐。

02 System类和Date类

Java.lang.System类中提供了一些与日期相关的类字段和方法

System类的常用方法:

方法声明功能介绍
Static long currentTimeMills()返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差

Java.util.Date类中主要用于描述特定的时间,也就是年月日时分秒,可以精确到毫秒

Date类中常用方法:

方法声明功能介绍
Date()使用无参方式构造对象,就是当前系统时间
Date( long date)根据参数指定的毫秒数来构造对象,参数是距离1970年1月1日0时0分0秒之间以毫秒为单位的时间差
long getTime()获取调用对象距离1970年1月1日0时0分0秒之间以毫秒为单位的时间差
void setTime( long time)设置调用对象为距离基准时间time毫秒的时间点

03 SimpleDateFormat类

SimpleDateFormat类用于日期和文本之间的转换,具体的常用方法如下:

方法声明功能介绍
SimpleDateFormat()使用无参方式构造对象
SimpleDateFormat( String pattern)根据参数指定模式来构造对象,模式主要有以下:y-年 M-月 d-日 H-时 m-分 s-秒
final String format(Date date)将日期类型转换为文本类型
Date parse(String str)将文本类型转换为日期类型

04 Calendar类

java.util.Calendar类也是用于描述特定的时间,取代Date类中过时的方法实现全球化。

Calendar类是个抽象类,其具体子类针对不同国家的日历系统,其中最典型的就是GregorianCalendar(格里高日历),对应世界上绝大数国家/地区使用的标准日历系统。

Calendar类常用的成员方法:

方法声明功能介绍
static Calendar getInstance()获取Calendar类型的引用
void set(int y,int m,int d,int h,int min,int s)设置年月日时分秒
Date getTime()将Calendar类型转换为Date类型
void set(int field,int value)设置指定字段的数值
void add(int field,int amount)向指定字段增加数值

05 LocalDate类、LocalTime类、LocalDateTime类

  • LocalDate类用于描述年-月-日格式的日期信息,该类不表示时间和时区信息,常用的方法是 static LocalDate now(),用于从系统中获取当前日期(默认时区)
  • LocalTime类用于描述时间信息,可以描述时分秒以及纳秒,常用的方法有两个:static LocalTime now ()和static LocalTime now(Zoneld zone),前一个是从默认时区获取当前时间,后一个是根据参数指定时区获取当前时间
  • LocalDateTime类是描述ISO-8601日历系统中没有时区的日期时间,如2007-12-03T10:15:30,常用方法有static LocalDateTime now()和static LocalDateTime of(int y,int m,int d,int mon,int hint min,int sec)以及int getYear()、int getDayOfMonth()等获取年份、月份、分钟、小时等方法