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()等获取年份、月份、分钟、小时等方法