- Object类api
- String的常用的api方法
- StringBuilder类
- StringBuffer类
- 封装类
- 方式一的写法在任意jre版本都能使用,方式二的写法只能在jre1.5及以上版本,此方式是属于自动装箱和拆箱,建议写第二种
- 数学相关的类
- 正则表达式
Object类api
是所有类的根类,此类中放置了一些常用api方法,这些api是所有的类都需要使用的
- getClass() 获取指定对象的Class类型的对象
- equals(Object) 判断地址
- hashCode() 返回指定对象的哈希值
-
toString() 输出对象的类型+@哈希值,如果两个对象相同,说明是一个对象,只占用一份内存空间,输出的哈希值是一样的
system.out.println(对象名);等价于system.out.println(对象名.toString()); - String
- java.lang.String使用final修饰的类,不能被继承
- 字符串底层封装的是字符数组以及操作字符数组的api方法
- 字符串一旦创建,对象将无法更改,但字符串的引用是可以重新赋值的
- java字符串采用的是Unicode编码
- String常量池
- java为了提高性能,静态的字符串(字面量,常量)在常量池中创建,并尽量使用同一个对象重用静态字符串
- 对于重复出现的字符串,jvm会首先在常量池中查找,如果存在就返回该对象
比如:String str1=”abc”;//abc字符串放置到常量池中,在栈中引用是str1
在另一个作用域中,String str2=”abc”;abc在常量池中寻找是否有相同的字符串,如果有就指向它,没有就在常量池中添加
String str5="helloworld";
String str6="hello"+"world";
String str7="hello";
String str8="world";
String str9=str7+str8;//str9在堆区中出现的
上例中str5和str6指向的是用一个地址,而和str9不是同一个地址
详细解释
常量池
String的常用的api方法
- indexOf方法
用户在字符串中检索另一个字符串(从前往后找)
- int indexOf(String str) 在字符串中检索str,返回第一次出现的位置,如果没有找到就返回-1
- int indexOf(String str,int fromIndex) 从fromIndex位置开始检索str
- lastIndexOf方法
用户在字符串中检索另一个字符串(从后往前找)
- int lastIndexOf(String str) 在字符串中检索str,返回第一次出现的位置,如果没有找到就返回-1
- int lastIndexOf(String str,int fromIndex) 从fromIndex位置开始检索str indexof和lastIndexOf方法返回的结果都是整数,找到字符串的位置,没找到返回-1
-
subString方法 用于返回一个字符串的子字符串 String subString(int beginIndex,int endIndex),左闭右开
String subString(int beginIndex),从beginIndex开始一直到末尾 - trim方法,用于去掉字符串两边的空格 String trim();
- charAt方法 返回指定位置的字符
char charAt(int index);
如果超出范围会报数组下标越界异常
StringIndexOurOfBoundException - startWith方法 检测一个字符串是否以自定的字符串开头 boolean startsWith(String str)
- endsWith方法 检测一个字符串是否以指定的字符串为尾部 boolean endsWith(String str)
- toUpperCase方法,转换字符串中的所有字符为大写
- toLowerCase方法,转换字符串中的所有字符为小写
- valueOf方法 将其他类型转换为字符串类型(静态方法)
- splite方法,根据指定的规则拆分字符串 String[] split(String str)
- equals方法,判断内容,因为重写了Object的equals方法
- equalsIgnoreCase方法,忽略大小写比较内容
StringBuilder类
封装的是可变字符串,对象创建后,可以通过调用本类的api方法,改变其封装的字符串序列
- StringBuilder append(String str);//追加字符串
- StringBuilder insert(int destOffset,String str);//插入字符串
- StringBuilder delete(int start,int end);//删除指定开始和结束的字符串(左闭右开)
- StringBuilder replace(int start,int end,String str);
- StringBuilder reverse();//字符串反转
方法链:方法的返回值都是本类对象就可以用方法链
比如
StringBuilder sb = new StringBuilder("abc");
sb.append("de").insert(2,"哈哈");
//结果是ab哈哈cde
StringBuffer类
StringBuffer和StringBuilder类用法基本相同
String,StringBuilder和StringBuffer的区别
String字符串列表不可变,里面的字符数组是final
StringBuilder和StringBuffer都是字符串系列可以改变
StringBuilder线程不安全,异步,速度快
StringBuffer线程安全,同步,速度慢
如果频繁对字符串的内容做增删改,首选StringBuilder或StringBuffer
如果字符串内容不改变,首选String
封装类
基本数据类型 | 封装数据类型 | |
---|---|---|
byte | Byte | |
char | Character | |
short | Short | |
int | Integer | |
long | Long | |
float | Float | |
double | Double | |
boolean | Boolean | |
void | Void |
为什么使用封装类
8种基本数据类型,给指定的基本数据类型存储完数据
基本数据类型不能通过方法来操作数据,不是面向对象的操作方式
封装类解决了这个问题,先把数据存储给封装类对象,然后通过打点调用方法,通过方法可以对对象中的数据进行操作
比如:
Integer intObj = new Integer(10);
//把整型数据转换成字节
byte byteValue = intObj.byteValue();
不用面向对象的思维实现
int i = 10;
byte byteValue = (byte)i;
拆箱和装箱
- 拆箱:把类类型拆开变成基本数据类型,即把对象中的数据拆出来变成基本数据类型的数据
- 装箱:是把基本数据类型的数据封装成对象数据
比如:
- 一:
Integer i = new Integer(3);//把基本数据类型数据3装箱成对象i
int ii = i.intValue();//把i对象中的数据3,转换成基本数据类型ii
- 二:
Integer k=3;//装箱
int kk=k;//拆箱
方式一的写法在任意jre版本都能使用,方式二的写法只能在jre1.5及以上版本,此方式是属于自动装箱和拆箱,建议写第二种
数学相关的类
- Math类
- Math类是final的类
- 构造方法私有,不可以创建对象
- 主要用法是Math类提供了大量的静态方法
- 在计算小数的时候,不够精确
Math.floor(1234.567)//取整 去尾 Math.ceil(1234.567)//取整 加一 Math.max(1234,567)//取出最大值 Math.min(1234,567)//取出最小值 Math.random()//随记取值
- BigDecimal类
- 用于精确计算的类
- 在精确计算的时候,要求参数以字符串的方式传入此类的对象
BigDecimal bigDecimal1 = new BigDecimal("123.456"); BigDecimal bigDecimal2 = new BigDecimal("123.456"); BigDecimal bigDecimal3 = bigDecimal1.multiply(bigDecimal2);
- BigInteger
- 用于存储任意大小的整数的类
- 在存储数据的时候,最好用字符串的方式传入对象
BigInteger bi1 = new BigInteger("1234567890");
System.out.println(bi1.intValue());
- 日期相关类
- Date类
- 1.表示日期的类
- 2.提供操作日期的方法,但很多方法标记为过时(Deprecated)
- SimpleDateFormat类
- 1.parse方法,将日期的字符串转换成日期
//设置指定的日期格式
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
//把日期的字符串转换成日期对象
Date date1 = simpleDateFormat1.parse("2019-07-18 10:38:14:000");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒SSS毫秒");
Date date2 = simpleDateFormat2.parse("2019年07月18日 10小时39分钟40秒600毫秒");
SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss#SSS#");
Date date3 = simpleDateFormat3. parse("2019/07/18 10/39/40#601#");
- 2.format方法,将日期对象转换为日期的字符串
//设置指定的日期格式 SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); //把日期对象转换成日期的字符串 String str1 = simpleDateFormat1.format(new Date()); //设置指定的日期格式 SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒SSS毫秒"); String str2 = simpleDateFormat2.format(new Date()); //设置指定的日期格式 SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss#SSS#"); String str3 = simpleDateFormat3.format(new Date());
-
3.在转换的时候,可以提供转换的格式
- Calendar类
- 1.有关日历相关的类,控制时区
- 2.提供大量的方法来操作时间
- 3.Calendar类是一个抽象类,不能直接new实例化对象
Calendar cal = Calendar.getInstance();
总结
用Date对象存储日期的数据
用Calendar类的对象来操作Date对象中的日期数据
用SimpleDateFormat做Date对象和日期字符串相互转换
正则表达式
正则表达式就是记录文本规则的代码
比如:
[a-z] 表示a到z的任意一个字符
[a-z]+ 表示1个或多个a-z的字符组成的字符串
-
字符集合: [abc] a,b,c中任意一个 [^abc] 除了a,b,c的任意一个字符 [a-z] a-z中任意一个字符 [a-zA-Z0-9] a-z,A-Z,0-9中任意一个字符 [a-z&&[^bc]] a-z中除了b,c以外的任意一个字符
-
预定义字符集 . 任意一个字符 \d 任意一个数字字符 相当于[0-9] \w 单词字符 相当于[a-zA-Z0-9_] \s 空白字符[\t\n\r\f] \D 非数字字符 \W 非单词字符 \S 非空白字符
-
数量词: X? 表示0个或一个X X* 表示0个或任意多个X X+ 表示1个到任意多个X (大于等于1个X) X{n} 表示n个X n代表一个数字 X{n,} 表示n个X到任意多个X (大于等于n个X) X{n,m} 表示n个到m个X
比如:定义6位数字 [0-9][0-9][0-9][0-9][0-9][0-9] \d\d\d\d\d\d \d{6}
-
分组 (): 表示分组,可以将一系列正则表达式看做是一个整体 分组是可以使用”|”表示或的关系 比如: (+86|0086)?\s?\d{11} +86 13800138000 +0086 13800138000 (+86|0086)?\s*\d{11} +86 13800138000
-
便捷匹配: ^ 代表字符串的开始 $ 代表字符串的结束