1.String类与StringBuffer类

1.1. String类的初始化

  • 使用字符串常量直接初始化一个String对象
1
2
3
4
5
String 变量名= 字符串;

String str1 = null; // 初始化为空
String str2 = ""; // 初始化为空字符串
String str3 = "abc"; // 初始化为abc,其中abc为字符串常量
  • 使用String的构造方法初始化字符串对象
1
String 变量名 = new String(字符串);
  • String类中常用的构造方法:
方法声明功能描述
String()创建一个内容为空的字符串
String(String value)根据指定的字符串内容创建对象
String(char[] value)根据指定的字符数组创建对象

1.2.String类的常见操作

方法声明功能描述
int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引
int lastIndexOf(int ch)返回指定字符在此字符串中最后一次出现处的索引
int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str)返回指定子字符串在此字符串中最后一次出现处的索引
char charAt(int index)返回字符串中index位置上的字符,其中index的取值范围是:0~(字符串长度-1)
boolean endsWith(String suffix)判断此字符串是否以指定的字符串结尾
int length()返回此字符串的长度
boolean equals(Object anObject)将此字符串与指定的字符串比较
boolean isEmpty()当且仅当字符串长度为0时返回true
boolean startsWith(String prefix)判断此字符串是否以指定的字符串开始
boolean contains(CharSequence cs)判断此字符串中是否包含指定的字符序列
String toLowerCase()使用默认语言环境的规则将String中的所有字符都转换为小写
String toUpperCase()使用默认语言环境的规则将String中的所有字符都转换为大写
static String valueOf(int i)返回 int 参数的字符串表示形式
char[] toCharArray()将此字符串转换为一个字符数组
String replace(CharSequence oldstr, CharSequence newstr)返回一个新的字符串,它是通过用newstr替换此字符串中出现的所有oldstr得到的
String[] split(String regex)根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分割为若干个子字符串
String substring(int beginIndex)返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符
String substring(int beginIndex, int endIndex)返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符

==注意==

  • String字符串在获取某个字符时,会用到字符的索引,当访问字符串中的字符时,如果字符的索引不存在,则会发生StringIndexOutOfBoundsException(字符串角标越界异常)。

  • 访问字符串中的字符时,不能超出字符的索引范围,否则会出现异常,这与数组中的角标越界异常相似。

1
2
String s = "abcde"; 
System.out.println(s.charAt(10));

1.3.StringBuffer类

1.3.1.概念

  • StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的StringBuffer类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的StringBuffer对象。

1.3.2.常用方法

方法声明功能描述
StringBuffer append(char c)添加字符到StringBuffer对象中末尾
StringBuffer insert(int offset,String str)在StringBuffer对象中的offset位置插入字符串str
StringBuffer deleteCharAt(int index)移除StringBuffer对象中指定位置的字符
StringBuffer delete(int start,int end)删除StringBuffer对象中指定范围的字符或字符串
StringBuffer replace(int start,int end,String s)将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行替换
void setCharAt(int index, char ch)修改指定位置index处的字符
String toString()返回StringBuffer缓冲区中的字符串对象
StringBuffer reverse()将此StringBuffer对象用其反转形式取代

1.3.3.StringBuffer类和String类的对比

  • String类定义的字符串是常量,一旦创建后,内容和长度都是无法改变的。StringBuffer表示字符容器,其内容和长度可以随时修改
  • String类重写了Object类的equals()方法,而StringBuffer类没有重写Object类的equals()方法

1.3.4.StringBuilder

  • StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。通常情况下,如果创建一个内容可变的字符串对象,应该优先考虑StringBuilder

2.System类与Runtime类

2.1.System类

2.1.1.概念

  • System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可

2.1.2.常用方法

方法声明功能描述
static void exit(int status)该方法用于终止当前正在运行的Java虚拟机,其中参数status表示状态码,若状态码非0 ,则表示异常终止
static void gc()运行垃圾回收器,并对垃圾进行回收
static native long currentTimeMillis()返回以毫秒为单位的当前时间
static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)从src引用的指定源数组复制到dest引用的数组,复制从指定的位置开始,到目标数组的指定位置结束
static Properties getProperties()取得当前的系统属性
static String getProperty(String key)获取指定键描述的系统属性
  • getProperties():该方法用于获取当前系统的全部属性该方法会返一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的
  • currentTimeMillis():该方法返回一个long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳
  • arraycopy():该方法用于将一个数组中的元素快速拷贝到另一个数组
    • src:表示源数组
    • dest:表示目标数组
    • srcPos:表示源数组中拷贝元素的起始位置
    • destPos:表示拷贝到目标数组的起始位置
    • length:表示拷贝元素的个数

2.2.Runtime类

2.2.1.基本概念

  • Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程
  • 每次使用“java”命令启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例,应用程序会通过该实例与其运行时的环境相连
  • Runtime类中提供了一个exec()方法,该方法用于执行一个DOS命令,从而实现和在命令行窗口中输入DOS命令同样的效果
1
Runtime run = Runtime.getRuntime();

3.Math类与Random类

3.1.Math类

  • Math类是一个工具类,主要用于完成复杂的数学运算,如求绝对值、三角函数、指数运算等
  • 由于Math类的构造方法被定义成private,因此无法创建Math类的对象
  • Math类中的所有方法都是静态方法,可以直接通过类名来调用它们
  • 除静态方法外,Math类中还有两个静态常量PIE,分别代表数学中的πe

3.2.Random类

3.2.1.基本概念

  • 指定的取值范围内随机产生数字

3.2.2.构造方法

方法声明功能描述
Random()构造方法,用于创建一个随机数生成器,每次实例化Random对象会生成不同的随机数
Random(long seed)构造方法,使用一个long型的seed(种子)创建伪随机数生成器,当seed相同时,每次实例化Random对象会生成相同的随机数

3.2.3.常用方法

方法声明功能描述
boolean nextBoolean()随机生成boolean类型的随机数
double nextDouble()随机生成double类型的随机数
float nextFloat()随机生成float类型的随机数
int nextInt()随机生成int类型的随机数
int nextInt(int n)随机生成[0,n)之间int类型的随机数
long nextLong()随机生成long类型的随机数

4.包装类

4.1.基本概念

  • 通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象
基本数据类型对应的包装类
byteByte
charCharacter
intInteger
shortShort
longLong
floatFloat
doubleDouble
booleanBoolean
  • 自动装箱(Autoboxing):是指将基本数据类型的变量赋给对应的包装类变量
  • 自动拆箱(AutoUnboxing):是指将包装类对象类型直接赋给一个对应的基本数据类型变量

4.2.相互转换

  • 通过引用数据类型字符串String类的valueOf()方法可以将8种基本数据类型转换为对应的字符串类型
  • 通过8种包装类的静态方法valueOf()既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外)
  • 通过8种包装类的有参构造方法同样既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外)
  • 通过8种包装类的静态方法parseXxx()可以将变量内容匹配的字符串转换为对应的基本数据类型
  • 包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Main {
public static void main(String[] args) {
int num = 123;
// 1.通过String.valueOf()方法将基本类型转换为字符串
String string = String.valueOf(num);
System.out.println("将int变量转换为字符串的结果:" + string);

// 2.通过包装类的valueOf()静态方法将基本类型和字符串转化为包装类
String str = "998";
Integer integer = Integer.valueOf(num);
Integer integer2 = Integer.valueOf(str);
System.out.println("将int变量转换为包装类的结果:" + integer);
System.out.println("将字符串变量转换为包装类的结果:" + integer2);

// 3.通过包装类的有参构造方法将基本类型和字符串转换为包装类
Integer integer3 = new Integer(num);
Integer integer4 = new Integer(str);
System.out.println("通过构造器将int变量转换为包装类的结果:" + integer3);
System.out.println("通过构造器将字符串变量转换为包装类的结果:" + integer4);

// 4.通过包装类的parseXxx()静态方法将字符串转换为基本数据类型
int parseInt = Integer.parseInt(str);
System.out.println("将字符串转换为基本类型的结果:" + parseInt);

// 5.通过包装类的toString()方法将包装类装换为字符串
String string2 = integer.toString();
System.out.println("将包装类转换为字符串的结果:" + string2);
}
}
1
2
3
4
5
6
7
8
9
10
11
/**
* 打印结果
*
* 将int变量转换为字符串的结果:123
* 将int变量转换为包装类的结果:123
* 将字符串变量转换为包装类的结果:998
* 通过构造器将int变量转换为包装类的结果:123
* 通过构造器将字符串变量转换为包装类的结果:998
* 将字符串转换为基本类型的结果:998
* 将包装类转换为字符串的结果:123
*/

4.3.注意

  • 除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错
  • 除了Character外,包装类都有parseXxx(String s)的静态方法,将字符串转换为对应的基本类型的数据。参数s不能为null,而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错
1
2
int i = Integer.parseInt("123");             // 合法    
Integer in = Integer.parseInt("itcast"); // 不合法

5.日期与时间类

5.1.Date类

  • Date():用来创建当前日期时间的Date对象
  • Date(long date):用于创建指定时间的Date对象,其中date参数表示1970年1月1日0时0分0(称为历元)以来的毫秒数,即时间戳

5.2. Calendar类

5.2.1.基本概念

  • Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分,比如年、月、日、时、分和秒等
  • Calendar类是一个抽象类,不可以被实例化
  • 在程序中需要调用其静态方法getInstance()来得到一个Calendar对象,然后才能调用其相应的方法

5.2.2.语法

1
Calendar calendar = Calendar.getInstance();

5.2.3.常用方法

方法声明功能描述
int get(int field)返回指定日历字段的值
void add(int field,int amount)根据日历规则,为指定的日历字段增加或减去指定的时间量
void set(int field,int value)为指定日历字段设置指定值
void set(int year,int month,int date)设置Calendar对象的年、月、日三个字段的值
void set(int year.int month,int date,int hourOfDay,int minute,int second)设置Calendar对象的年、月、日、时、分、秒六个字段的值

5.2.4.(非)容错模式

  • lenient模式(容错模式)和non-lenient模式(非容错模式)

  • 当Calendar处于lenient模式时,它的字段可以接收超过允许范围的值,当调用get(int field)方法获取某个字段值时,Calendar会重新计算所有字段的值,将字段的值标准化。

1
2
3
Calendar calendar = Calendar.getInstance();
calendar.setLenient(true); //开启lenient模式(默认开启)
calendar.setLenient(false); //开启non-lenient模式

5.3.JDK8 —- 新增日期与时间类

类名功能描述
Clock用于获取指定时区的当前日期、时间。
DayOfWeek枚举类,定义了一周七天周一到周日的枚举值
Duration表示持续时间。该类提供的ofXxx()方法用于获取指定的时间的小时、分钟、秒数等。
Instant表示一个具体时刻,可以精确到纳秒。该类提供了静态的now()方法来获取当前时刻,提供了静态的now(Clock clock)方法来获取clock对应的时刻。同时还提供了一系列的plusXxx()方法来获取当前时刻基础上加上一段时间,以及一系列的minusXxx()方法在当前时刻基础上减去一段时间。
LocalDate表示不带时区的日期,如2018-01-27。该类提供了静态的now()方法来获取当前日期,提供了静态的now(Clock clock)方法来获取clock对应的日期。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几年、几月、几日等,以及一系列的minusXxx()方法在当前年份基础上减去几年、几月、几日等。
LocalTime表示不带时区的时间,如14:49:20。该类提供了静态的now()方法来获取当前时间,提供了静态的now(Clock clock)方法来获取clock对应的时间。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几小时、几分、几秒等,以及一系列的minusXxx()方法在当前年份基础上减去几小时、几分、几秒等。
LocalDateTime表示不带时区的日期、时间。该类提供了静态的now()方法来获取当前日期、时间,提供了静态的now(Clock clock)方法来获取clock对应的日期、时间。同时还提供了一系列的plusXxx()方法在当前年份基础上加上几年、几月、几日、几小时、几分、几秒等,以及一系列的minusXxx()方法在当前年份基础上减去几年、几月、几日、几小时、几分、几秒等。
Month枚举类,定义了一月到十二月的枚举值
MonthDay表示月日,如–01-27。该类提供了静态的now()方法来获取当前月日,提供了静态的now(Clock clock)方法来获取clock对应的月日。
Year表示年,如2018。该类提供了静态的now()方法来获取当前年份,提供了静态的now(Clock clock)方法来获取clock对应的年份。同时还提供了plusYears()方法在当前年份基础上增加几年,以及minusYears()方法在当前年份基础上减去几年。
YearMonth表示年月,如2018-01。该类提供了静态的now()方法来获取当前年月,提供了静态的now(Clock clock)方法来获取clock对应的年月。同时还提供了plusXxx()方法在当前年月基础上增加几年、几月,以及minusXxx()方法在当前年月基础上减去几年、几月。
ZoneId表示一个时区
ZonedDateTime表示一个时区化的日期、时间
Year表示年,如2018。该类提供了静态的now()方法来获取当前年份,提供了静态的now(Clock clock)方法来获取clock对应的年份。同时还提供了plusYears()方法在当前年份基础上增加几年,以及minusYears()方法在当前年份基础上减去几年。

6.格式化类

6.1.DateFormat类

6.1.1.基本概念

  • DateFormat类专门用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象
  • DateFormat是一个抽象类,不能被直接实例化,但它提供了一系列的静态方法来获取DateFormat类的实例对象,并能调用其他相应的方法进行操作

6.1.2.常用方法

方法声明功能描述
static DateFormat getDateInstance()用于创建默认语言环境和格式化风格的日期格式器
static DateFormat getDateInstance(int style)用于创建默认语言环境和指定格式化风格的日期格式器
static DateFormat getDateTimeInstance()用于创建默认语言环境和格式化风格的日期/时间格式器
static DateFormat getDateTimeInstance( int dateStyle,int timeStyle)用于创建默认语言环境和指定格式化风格的日期/时间格式器
String format(Date date)将一个 Date 格式化为日期/时间字符串。
Date parse(String source)将给定字符串解析成一个日期

6.1.3.常用常量

  • FULL: 用于表示完整格式
  • LONG: 用于表示长格式
  • MEDIUM: 用于表示普通格式
  • SHORT: 用于表示短格式

6.2.SimpleDateFormat类

6.2.1.基本概念

  • SimpleDateFormat类是DateFormat类的子类,它可以使用new关键字创建实例对象
  • 在创建实例对象时,它的构造方法需要接收一个表示日期格式模板的字符串参数

6.2.2.格式化示例

  • 使用SimpleDateFormat类将日期对象以特定的格式转为字符串形式
1
2
SimpleDateFormat sdf = new SimpleDateFormat("Gyyyy年MM月dd日:今天是yyyy年的第D天,E"); 
System.out.println(sdf.format(new Date()));
  • 使用SimpleDateFormat类将一个指定日期格式的字符串解析为Date对象
1
2
3
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String str = "2021/10/15";
System.out.println(sdf.parse(str));

6.3.DateTimeFormatter类

6.3.1.基本概念

  • 该类也是一个格式化类,其功能相当于DataFormatSimpleDateFormat的合体,它不仅可以将日期、时间对象格式化成字符串,还能将特定格式的字符串解析成日期、时间对象
  • 要使用DateTimeFormatter进行格式化或者解析,就必须先获得DateTimeFormatter对象

6.3.2.获取实例对象方式

  • 使用静态常量创建DateTimeFormatter格式器

    DateTimeFormatter类中包含大量的静态常量,如BASIC_ISO_DATEISO_LOCAL_DATEISO_LOCAL_TIME等,通过这些静态常量都可以获取DateTimeFormatter实例

  • 使用不同风格的枚举值来创建DateTimeFormatter格式器

    FormatStyle类中定义了FULLLONGMEDIUMSHORT四个枚举值,它们表示日期和时间的不同风格

  • 根据模式字符串创建DateTimeFormatter格式器

6.3.3.基本使用

  • 完成日期、时间格式化

    • 调用DateTimeFormatterformat(TemporalAccessor temporal)方法执行格式化
      • 参数temporal是一个TemporalAccessor类型接口,其主要实现类有LocalDateLocalDateTime
    • 调用LocalDateLocalDateTime等日期、时间对象的format(DateTimeFormatter formatter)方法执行格式化
  • 解析字符串

    • 可以通过日期时间对象所提供的parse(CharSequence text, DateTimeFormatter formatter)方法来实现