Application Programming Interface
字符串、集合、文件、输入输出、网络、多线程
文档注释
文档注释是功能级注释,用来说明一个类,一个方法或一个常量的,因此只在上述三个地方使用。
文档注释可以使用Java自带的命令javaDoc来对这个类生成手册
Java.lang.String使用了final稀释,不能被继承
字符串底层封装了字符数组及针对字符数组的操作算法
字符串一旦创建,对象内容不可改变,连接字符串会创建新对象
Java字符串在内存中采用Unicode编码方式,任何一个字符对用两个字节的定长编码
String用来表示一个字符串
特点:
Java在堆内存中开辟了一段空间用于缓存所有使用字面量形式创建的字符串对象,并在后期再次使用该字面量创建字符串时重用对象,避免内存中堆积大量内容一样的字符串对象来减小内存开销
Java为了提高性能,直接量字符串创建后会缓存在常量池中
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象地址。
编译器在编译期间若遇到几个计算表达式,发现在编译期可以确定结果时就会进行计算,并将结果编译到class文件中,
这样以来JVM每次执行字节码文件就无需再计算了
int length()
返回当前字符串的长度
indexOf()
检索给定字符串在当前字符串中的位置,若当前字符串不含有给定内容则返回值为 -1
substring()
截取当前字符串中指定范围内的字符串,两个参数分别为开始位置的下标和结束位置的下标。
重载的方法是从指定位置开始截取到字符串末尾
trim()
去除一个字符串两边的空白字符
charAt()
返回当前字符串指定位置上的字符
startsWith()和endsWith()
判断当前字符串是否是以给定的字符串开始或结束的
toLowerCase()和toUpperCase()
将当前字符串中的英文部分转换为全大写或全小写
valueOf()
String提供了一组重载的静态方法
是将其他类型转换为String
由于String的不变对象特性,修改内容会创建新对象
String不适合频繁修改操作,性能低,开销大
Java提供了StringBuilder类
StringBuilder是专门用来修改String的一个API,
内部维护一个可变的char数组,修改都是在这个数组上进行的
内部会自动扩容,修改速度和性能开销优异,并且提供了修改字符串的常见对应的方法:增删改插
两个类的功能是一致的,StringBuffer始于JDK1.0
StringBuilder始于JDK1.5
toString():是Object提供的方法,将内容以字符串形式返回
append():追加内容
replace():替换部分内容
delete():删除部分内容
insert():插入操作
reverse():翻转字符串
用来描述一个字符串的内容格式,通常用来匹配一个字符串的内容是否符合格式要求
基本语法
[ ]
表示一个字符,该字符可以是[ ]中指定的内容
预定义字符
量词
?
表示前面的内容出现0-1次
例如:
[abc]? 可以匹配:a 或 b 或 c 或什么也不写
+
表示前面的内容出现1次以上
[abc]+ 可以匹配:aaaaaaaaaa…或abcabcbabcbabcbabcbabbabab…
但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer…
星号
表示前面的内容出现任意次(0-多次)
匹配内容与+一致,只是可以一次都不写
{n}
表示前面的内容出现n次
例如:
[abc]{3} 可以匹配:aaa 或 bbb 或 aab
不能匹配:aaaa或aad
{n,m}
表示前面的内容出现最少n次最多m次
[abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
不能匹配:aaaaaa 或 aabbd
{n,}
表示前面的内容出现n次以上(含n次)
[abc]{3,} 可以匹配:aaa 或 aaaaa… 或 abcbabbcbabcbabcba…
不能匹配:aa 或 abbdaw…
( )
用于分组,是将括号内的内容看做是一个整体
例如:
(abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.
不能匹配aaa 或abcabc
(abc|def){3}表示abc或def整体出现3次.
可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
matches方法
boolean matches(String regex)
使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false
split方法
String[] split(String regex)
将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回
replaceAll方法
String replaceAll(String regex,String str)
将当前字符串中满足正则表达式的部分替换为给定内容
Object是所有类的顶级超类,
其中有两个经常被子类重写的方法
==对于引用类型的意义是比较是否为同一个对象
equals则是比较两个对象的值(对象内容,特征是否一致)
java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,
使得基本类型可以通过包装类的实例以对象的形式存在.
什么是集合
集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便
java.util.Collection是所有集合的顶级接口,Collection下面有多种实现类,因此我们有更多的数据可提供选择。
判定元素的标准是依靠元素自身equals比较的结果,
为true就认为是重复元素
boolean and(E e)
向当前集合中添加一个元素,当元素成功添加后,返回true
int size()
返回当前集合的元素个数
boolean isEmpty()
判断当前集合是否为空集
clear()
清空集合
集合的很多操作与元素的equals方法相关
集合重写了Object的toString方法,输出的格式为
[元素1.toString(),元素2.toString(),…]
boolean contains(Object o)
判断当前集合是否包含给定元素,这里判断的依据是给定元素是否与集合现有元素存在equals比较为true的情况
remove()
remove用来从集合删除给定元素,删除的也是与集合中equals比较为true的元素
对于可以存放重复元素的集合而言,只删除一次
集合只能存放引用类型元素,并且存放的是元素的引用(地址)
集合提供了如 并集,删交集,判断包含子集等操作
Collection提供了统一的遍历集合方式:迭代器模式
迭代器要求遍历的过程中不得通过集合的方法增删元素
否则会抛出异常:ConcurrentModificationExceptoin(并发的修改异常)
使用迭代器的remove方法
JDK5之后推出了一个特性:增强型for循环
JDK5之后推出的另一个特性:泛型
void add(int index,E e)
将给定元素插入到指定位置
E remove(int index)
删除并返回指定位置上的元素
Collection提供了一个方法:toArray
可以将当前集合转换为一个数组
重载的toArray方法要求传入一个数组,内部会将集合所有元素存入该数组,后将其返回。如果给定的数组长度不足,则方法内部会自行根据给定数组类型创建一个与集合size一致长度的数组并将集合元素存入后返回
数组的工具类Arrays提供了一个静态方法:asList()
可以将一个数组转换为一个List集合
Collections是集合的工具类,里面定义了很多静态方法用于操作集合
Collections.sort(List list)方法
对List集合进行自然排序(从小到大)
当我们调用某个API功能时,其要求我们为其修改其他额外的代码,这个现象就是侵入性,侵入性越强的API越不利于程序的后期可维护性,应当尽量避免
重载的sort方法要求我们再传入一个Comparator"比较器",该比较器用来为集合元素临时定义一种比较规则,从而将List集合中的元素通过该比较器比较大小后进行排序
实际应用中我们需要实现该接口为集合元素提供比较规则
compare方法用来定义两个参数o1,o2的大小关系
返回值用来表示o1与o2的大小关系
当返回值>0时,应当表示的含义是o1>o2
当返回值<0时,表示o1
Lambda表达式JDK8之后推出的新特性
JDK8之后,java在集合Collection接口中添加了一个用于遍历集合元素的forEach方法
可以基于Lambda表达式遍历集合元素
FIle类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径)
使用FIle可以做到:
File[] listFiles()
访问一个目录中的所有子项
将当前目录中的所有子项返回,返回的数组中每个File实例表示其中的一个子项
boolean isFile()
判断当前File表示的是否为一个文件
boolean isDirectory()
判断当前File表示的是否为一个目录