Object:
getClass() - 获取类的字节码对象
wait * 3
notifyAll()/notify()
toString() - 内容以字符串方式输出
equals() - 判断两个对象是否相等
hashCode() - 获取内存地址值
clone()
深克隆: 复制对象
浅克隆: 复制引用
finalize()
垃圾回收机制 - gc
内存溢出: 存满了,没有空间
内存泄漏: 被没有引用的对象占用空间
跟时间相关的类:
long - 短时间内的计算
Date - 显示时间
Calendar - 时间的推算/时间的跳转
时间格式化的类:
SimpleDateFormat("")
format(Date) -> 按指定格式输出String
parse() -> Date -> String
String类 - 字符串
1.特点:
a.字符串就是字符序列,本质上就是一个字符数组
b.String类是final修饰的,不可被继承的
c.String一旦创建就不可修改,属于不可变的字符序列
d.String重写了toString()
2.创建方式
a.直接创建
String str = “”;
b.构造方法创建
String()
String(byte[] bytes)
String(byte[] bytes, Charset charset)
String(char[] value)
String(String original)
3.常量池
a.常量池中放的都是常量
b.只要直接赋值的字符串,都指向常量池
4.内存编码问题
1)编码方式:
UniCode字符集 -> jvm识别
1字符 = 2字节
操作系统识别的编码方式: GBK UTF-8 ASCII ISO8859-1
UTF-8 -> 1字符 = 3字节
GBK -> 1字符 = 2字节
2)编码: 字符 -> 字节
API:
byte[] str.getBytes() -> 默认方式
byte[] str.getBytes(“GBK”) -> 指定方式
3)解码: 字节 -> 字符
构造方法:
new String(byte[],“GBK”)
new String(byte[])
4)乱码问题:
a.产生原因:
如果以gbk的方式编码得到的数组,然后以UTF-8的方式进行解码,就会出现乱码问题
b.解决乱码:
1.按照错误的方式进行编码
2.得到字节数组,在重新解码
常用API:
char charAt(int index)
String concat(String str)
boolean contains(CharSequence s)
boolean endsWith(String suffix) //判断结尾字符
boolean equalsIgnoreCase(String anotherString) //忽略大小写比较
int indexOf(String str)
boolean isEmpty()
int lastIndexOf(String str)
int length() //字符串长度
String replace(char oldChar, char newChar)
boolean startsWith(String prefix) //判断开始字符
String substring(int beginIndex) //获取子字符串
char[] toCharArray()
String toLowerCase() //全部小写
String toUpperCase() //全部大写
String trim() //去首尾空格
static String valueOf(Object obj)
正则表达式 - 字符串的一些排列规则
常用标识符:
边界匹配器:
开头: 以 ^开头 -> /^
结尾: 以 $结尾 -> /$
字符类:
[]:表示一个字符的位置
[abc]:可以出现a,或者可以出现b,或者可以出现c
[a-zA-Z]:所有的字母,包括大小写
[]: 在[]中不需要添加\表示转义
Greedy 数量词:
+ -> 1 或 n
? -> 0 或 1
* -> 0 或 n
{n} -> 刚好出现n次
{n,} -> 至少出现n次
{n,m} -> 最少出现n次,最多出现m次
预定义字符类:
. 表示所有字符
\d 表示[0-9]
\w 表示[a-z0-9A-Z_]
转义字符:
\. 表示.本身
\\ 表示\本身
\r
\t
\n
正则表达式常用API:
String replaceAll(String regex, String replacement)//替换
boolean matches(String regex) //判断正则表达式
String[] split(String regex) //根据正则表达式切割
StringBuilder 和 StringBuffer
-
StringBuilder 和 StringBuffer都是属于可变长字符串[在改变字符串的时候,不会产生新的对象]
2.创建:
new StringBuilder()
new StringBuilder(“String”)3.常用API:
StringBuilder append(Object obj) - 追加
StringBuilder delete(int start, int end) - 删除
StringBuilder insert(int offset, boolean b) - 插入
StringBuilder replace(int start, int end, String str) - 替换
StringBuilder reverse() - 反转
4.区别:
a.版本:
StringBuilder -> JDK1.5
StringBuffer -> JDK1.0
b.线程安全
StringBuilder: 线程不安全,效率高
StringBuffer: 线程安全,效率低
c.使用环境:
操作少量的数据使用 String
单线程环境下大量数据使用 StringBuilder
多线程环境下大量数据使用 StringBuffer
d.效率对比
String < StringBuffer < StringBuilder