第一章 字符串 String
1、字符串的特点
1. 字符串的内容永不可变
2. 字符串的底层是 字符数组 char[] 再底层是 字节数组 byte[]
2、字符串的构造方法
三种构造方法和一种直接赋值
三种构造方法:
A. 无参构造 String s1 = new String();
B. 字符数组构造 String s2 = new String(字符数组名称); //可以把字符数组-->字符串
C. 字节数组构造 String s3 = new String(字节数组名称); //可以把字节数组-->字符串
一种直接赋值的方式
String str = "字符串的内容值"; //推荐的写法,写法简单!
双等的作用:
- 对于基本数据类型而言,双等比较的是【数据值】
- 对于引用数据类型而言,双等比较的是【地址值】
3、字符串的常用方法
1. 比较
a.比较数值是否相等
public boolean equals(Object obj) //【重点】账号密码.参数是Object表示任何数据都可以作为参数.
b.比较数值是否相等
public boolean equalsIgnoreCase(String s) //验证码.忽略大小写的比较.
2. 获取
a.获取字符串长度
public int length() //【重点】获取字符串当中的字符的个数
b.拼接字符串方法
public String concat(String s) //把s拼接在以前字符串的后面.作为新字符串返回
c.获取单个字符
public char charAt(int index) //【重点】获取对应索引index位置的字符数据.索引从0开始
d.获取首次位置
public int indexOf(String s) //获取s在原始字符串当中,第一次出现的索引位置,没有就返回-1
e.截取子字符串
public String substring(int begin) //从begin对应索引,一直到最后
public String substring(int begin,int end) //从begin开始,到end结束. (包括begin不包括end)
3. 转换
a.转字符数组
public char[] toCharArray() //【重点】将字符串转换成为字符数组
b.转字节数组
public byte[] getBytes() //将字符串转换成为字节数组
c.替换字符串
public String replace(String oldStr,String newStr) //把所有的oldStr替换成为newStr
4. 分割
a.分割成字符串数组
public String[] split(String regex)//将原始字符串按照 regex 字符串进行分割,成为多个字符串数组
//注意: regex表示的是"正则表达式"不能随便写字符串.否则切割失败,正则表达式见CHM格式笔记.
//不写直接采用英文状态下面的句号分割. 如果一定要采用点分割。需要写上"\\."
注意事项:
三个长度的问题(数组长度、集合长度、字符串长度)别混淆了
- 数组的长度。 数组名称.length
- 集合长度。 集合名称.size( )
- 字符串长度。 字符串对象.length( )
4、字符串的遍历方式
方式1:
//定义一个字符串
String str = "为莘莘学子改变命运而讲课";
//拆开. 遍历字符串
// length() 获取字符串的长度
// charAt(索引)获取单独的某个字符
for (int i = 0; i < str.length(); i++) {
//获取单独的字符
char c = str.charAt(i);
System.out.println(c);
}
方式2:
//定义一个字符串
String str = "为千万学生少走弯路而著书";
//拆开. 遍历字符串
// 将字符串转换成为字符数组 toCharArray()
char[] arr = str.toCharArray();
//循环遍历数组
for (int i = 0; i < arr.length; i++) {
//获取单独的字符
char c = arr[i];
System.out.println(c);
}
第二章 static 静态
1、静态关键字的含义
1. 多个对象"共享"同一份数据的时候,需要使用 static 静态。
2. 被static修饰的数据,会优先于对象。不在属于某个单独的对象,而是属于类
2、静态修饰成员
1. 静态修饰成员变量
A. 格式:
static 数据类型 变量名称; //例如: static String classRoom; 所在教室
B.效果:
加上 static 之后,变量classRoom 不在属于某个对象,而是属于整个类。被所有对象共享使用。
C. 使用:
可以采用类名称直接打点调用。
例如: Student.classRoom = "102教室";
2. 静态修饰成员方法
A. 格式:
public static 返回值类型 方法名称(参数列表){ ...方法体... }
B. 效果:
加上静态 static 之后,我们不需要创建对象,可以直接使用类名称.方法名称.进行调用方法。
3. 注意事项:
A.静态不能调用非静态内容。"先人不知后人事" //秦始皇不知道康熙是谁?
B.静态方法当中,没有 this 关键字。(this就是当前类的'对象') ---> "静态优先于对象"
为什么要使用静态?
- 对于成员变量而言,可以共享相同的数据。
- 对于成员方法而言,可以省略一个步骤,无需创建对象,直接类名称打点调用方法!
3、静态代码块
1. 格式:
static{
...需要写代码....
}
2. 特点:
当类加载的时候,就会执行1次。注意是唯一的一次。
3. 执行顺序:
静态代码块,构造方法,普通方法。请问谁先执行?
A. 静态代码块在加载的时候,执行1次,唯一的1次
B. 构造方法在创建对象的时候,执行。每次创建对象,都会执行1次
C. 普通方法在我们对象调用方法的时候,才会加载执行。
4. 使用场景
目前使用不到。在就业班 Day18天讲 JDBC 工具类的时候,会使用到静态代码块。
4、静态的使用场景
作为工具类当中的工具方法使用
1. Arrays 工具类
static String toString(任意类型的数组名称) //把数组转换成为字符串格式.[11,22,33]
static void sort(任意类型的数组名称) //对数组的元素进行排序操作。升序(从小到大)
2. Math 工具类
static double abs(double a) //获取绝对值
static double ceil(double a) //向上取整。例如: 3.1向上取整变成4.0
static double floor(double a) //向下取整。例如: 5.9向下取整变成5.0
static long round(double a) //四舍五入
static double PI //圆周率. Math.PI