JDK API
JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口)就是一些已写好、可供直接调用的功能(在Java语言中,这些功能以类的形式封装)。
JDK API 包含的类库功能强大,经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等。
JDK包结构:
JDK中经常使用的包有:
包 | 功能 |
java.lang | Java程序的基础类,如字符串、多线程等,该包中的类使用的频率非常高,不需要import,可以直接使用 |
java.util | 常用工具类,如集合、随机数产生器、日历、时钟等 |
java.io | 文件操作、输入/输出操作 |
java.net | 网络操作 |
java.math | 数学运算相关操作 |
java.security | 安全相关操作 |
java.sql | 数据库访问 |
java.text | 处理文字、日期、数字、信息的格式 |
String
String是不可变的对象,本质是字符数组
public final class String
String对象一经创建,对象中的值是不可以改变的
string对象创建的两种方式
1.构造方法
new String(String str)
new String()
new String(StringBuffer)
new String(StringBuilder)
........
2直接指定直面量
String str="hello";
通过直接给出字符串字面量的方式创建出的对象,是保存于字符串常量池的。
字符串常量池是位于堆中的,字符串常量池是用于保存字符串字面量的,为了提高对象的使用率。在一个程序中,创建的字符串字面量对象保存于常量池中,如果在此之后,又要使用到此字面量,那么直接到常量池找,看此对象是否存在,如果存在,让引用直接指向,而不重新创建对象,如果不存在,才创建对象。
注意点:
其实常量池中保存的并不是字面量对象,而是引用(实际对象也是存储在堆中)
***通过构造方法产生的字符串,String a=new String("abc"); a指向堆中的对象,堆中的对象指向常量池,常量池再指向对中的abc对象;
方法
length():int 获取字符串的长度(字符个数)
indexOf系列方法:
-indexOf(int ch):int
获取指定字符在字符串中第一次出现的索引
-indexOf(int ch,int fromIndex):int
从指定位置开始查找指定字符第一次出现的索引
-indexOf(String subStr):int
获取指定子字符串在本字符串中第一次出现的索引
-indexOf(String subStr,int fromIndex):int
从指定位置开始查找指定子字符串在当前字符串中第一次出现的索引
lastIndexOf系列
lastIndexOf(int ch):int
-获取指定字符中最后一次出现的下标
lastIndexOf(int ch,int fromIndex):int
-从指定位置开始反向查找指定字符最后一次出现的下标
lastIndexOf(String str):int
lastIndexOf(String str,int fromIndex):int
trim():String
去掉字符串开始和结尾的空格,得到一个新对象
注意点:
字符串中间位置的空格不去
调用此方法得到了新对象
startsWith(String prefix):boolean
endsWith(String suffix):boolean
toUpperCase():String
toLowerCase():String
注意点:方法的返回值如果为String,意味着调用此方法得到了一个新String对象。
其作用正好和indexOf方法相反
substring
substring(int beginIndex):String
- 包括边界值
substring(int beginIndex,int endIndex):String
- 包括开头的边界值,不包括结尾的边界值
5 .StringBuilder
问题: 字符串的拼接:
String str = s1+s2+s3+….+sn;
以上这种方式拼接字符串过程中会浪费大量内存,不推荐的。
StringBuilder提供了一个可变的字符数组,所以字符串内容的修改都是在这个数组中进行,而不会每次修改都创建一个新对象.
使用:
1. 构造方法
a) StringBuilder()
b) StringBuilder(String)
2. 方法:
a) append(String str):StringBuilder
i. 注:返回的是this
b) insert(int destOffSet,String str)
c) delete(int start,int end)
d) replace(int strat,int end,String str)
e) reverse()
f) toString()
注意点:
1.StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return this。
2.java的字符串连接的过程是利用StringBuilder实现的
String s = s1+s2;在内存中底层就是采用StringBuilder完成
StringBuffer和StringBuilder的区别:
StringBuffer先出现的,它的作用和StringBuilder 完全相同,api操作也是完全相同的。
区别在于:
StringBuffer是保证线程安全的,效率较低
StringBuilder是非线程安全的,效率较高