Java常用类库
StringBuffer类
String和StringBuffer的区别
String
- 不可变性:
String
类是不可变的,这意味着一旦创建了一个String
对象,其值就不能改变。每次对String
进行修改(如连接、替换等操作)都会产生新的String
对象,原来的对象不会被改变。 - 线程安全性:由于
String
的不可变性,它是线程安全的,可以被多个线程共享而无需担心数据一致性的问题。 - 性能:因为每次修改都会创建新的对象,所以在频繁进行字符串操作时,
String
的效率较低。
StringBuffer
- 可变性:
StringBuffer
是一个可变的字符序列,可以被多次修改而不创建新的对象。这意味着如果需要对字符串进行大量的修改操作,使用StringBuffer
比使用String
更加高效。 - 线程安全性:
StringBuffer
是线程安全的。它的方法都是同步的(即加了synchronized
关键字),这使得StringBuffer
可以在多线程环境中安全地使用,但是也导致了它的性能相比非线程安全的StringBuilder
要差一些。 - 性能:当需要在一个单线程环境下进行大量字符串操作时,
StringBuffer
仍然不是最优选择,因为它的线程安全特性会带来额外的开销。在这种情况下,应该考虑使用StringBuilder
。
使用场景
- 使用
String
:当你不需要修改字符串内容时,或者修改次数非常少的时候,使用String
是合适的。此外,String
的不可变性和线程安全性使其成为多线程环境中的首选。 - 使用
StringBuffer
:如果你的应用程序需要在多线程环境中频繁地修改字符串,那么StringBuffer
是一个很好的选择,因为它提供了线程安全的操作。 - 使用
StringBuilder
:对于单线程环境下的频繁字符串操作,推荐使用StringBuilder
,因为它比StringBuffer
性能更高,同时又保持了可变性的优点。
StringBuffer介绍
String类自身有一个最大的缺陷:内容一旦声明则不可改变,JDK为了方便用户修改字符串内容提供了StringBuffer类
StringBuffer类不像String类那样可以直接通过声明字符串常量方式进行实例化,而是必须像普通类对象使用一样,首先通过构造方法进行对象实例化,而后才可以调用方法进行处理。
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public StringBuffer() | 构造 | 创建一个空的StringBuffer对象 |
2 | public StringBuffer(String str) | 构造 | 将接受到的String内容变为StringBuffer内容 |
3 | public StringBuffer append(数据类型 变量) | 普通 | 内容连接,等价于String中:”+”操作 |
4 | public StringBuffer insert(int offset,数据类型 变量) | 普通 | 在指定索引位置处插入数据 |
5 | public StringBuffer delete(int start,int end) | 普通 | 删除指定索引范围之内的数据 |
6 | public StringBuffer reverse() | 普通 | 内容反转 |
示例
public class JavaDome{
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
change(buf);
String data = StringBuffer.toString(); //将StringBuffer变为String实例
System.out.println(data);
}
}
public static void change(StringBffer temp){
temp.append("world").append("!");
}
实际上使用:
String strB = "hello"+"world"+"!"
程序编译后的结果全部等价于以下操作:
StringBuffer buf = new StringBuffer();
buf.append("hello").append("world").append("!");
所有的"+"编译之后都变成了StringBuffer中append()方法
除了可以修改内容的能力外,还提供了一些String类所不具备的方法
插入删除数据
StringBuffer buf = new StringBuffer();
buf.append("hello world").delete(6,12).insert(6,"!");
字符串反转
StringBuffer buf = new StringBuffer();
buf.append("hello");
System.out.println(buf.reverse());
CharSequence接口
常见子类
String、StringBuffer、StringBuilder
常见的方法
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public char charAt(int index) | 普通 | 获取指定索引字符 |
2 | public int length() | 普通 | 获取字符串长度 |
3 | public CharSequence subSequence(int start,int end) | 普通 | 截取部分字符串 |
使用示例
CharSequence str = "hello";
//子类实例向父类接口转型
CharSequence sub = str.subSequence(4,8);
//截取部分子字符串
//String类是CharSequence接口子类,所以本程序利用对象向上转型的操作通过字符串的匿名对象实现了CharSequece父接口对象实例化,随后调用subSequence()方法实现了子字符串的截取操作
注:
开发中优先考虑String类,只有在频繁操作修改这一操作中才会考虑使用StringBuffer或StringBuilder
AutoCloseable接口
该接口的主要功能是结合异常处理结构在资源操作完成后实现自动释放功能
public interface AutoCloseale{
public void close() throws Exception;//资源释放
}
Runtime类
Runtime描述的是运行时的状态,在每一个JVM进程中都会提供唯一的一个Runtime类实例化对象。
可以利用Runtime类对象获取与JVM有关的运行时状态。
由于Runtime类中只存在一个实例化对象,所以在Runtime类中默认将默认将其构造方法封装(单例设计模式),这样就必须用Runtime类中提供的getRuntime()方法(为static方法)来获取实例化对象,随后就可以获取一些系统相关的信息。
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static Runtime getRuntime() | 普通 | 获取Rintime类的实例化对象 |
2 | public int avaliableProcessors() | 普通 | 获取可用的CPU处理器数量 |
3 | public long maxMemory() | 普通 | 取得最大可用内存量 |
4 | public long totalMemory() | 普通 | 取得总共可用内存量 |
5 | public long freeMemory() | 普通 | 取得空闲内存量 |
6 | public void gc() | 普通 | 运行垃圾收集器,释放垃圾空间 |
获取本机CPU处理器数量
public class JavaAPIDemo{
public static void main(String args) throws Exception{
Runtime runtime = Runtime.getRuntime(); //获取Runtime实例化对象
System.out.println(runtime.avaliableProcessors()); //获取处理器数量
}
}
注: long型数据主要有两种情况,表示文件大小和表示日期时间
System类
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static void arraycopy(Object src,int srcPos,Object destPos,int length) | 普通 | 数组复制操作 |
2 | public static long currentTimeMillis() | 普通 | 取得当前的日期时间,以long型数据返回 |
3 | public static void gc() | 普通 | 执行GC操作 |
Cleaner类
在java中对象的整个生命周期大致可以分为七个阶段:
创建阶段(Created)
应用阶段(In Use)
不可见阶段(Invisible)
不可达阶段(Unreachable)
收集阶段(Collected)
终结阶段(Finalized)
释放阶段(Free)
Math数学计算
程序开发本质就是数据处理,java提供有java.lang.Math类来帮助开发者进行常规的数学计算处理。
例如,四舍五入,三角函数,乘方处理等
Math.abs(-10.9) //绝对值 10.9
Math.max(10.2,20.3) //获取最大值
Math.log(5) //对数:1.60943...
Math.round(15.1) //四舍五入 15
Math.round(-15.5) //四舍五入 -15
Math.round(-15.51) //四舍五入 -16
Math.pow(10.2,20.2) //乘方:2.36441...
Rondom随机数
import java.util.Random
设置一个随机数的范围边界就可以随机生成不大于此边界范围的正整数
方法(随机生成正整数):public int nextInt(int bound)
Random rand = new Random();
rand.nextInt(100);
大数字处理类
BigInteger
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public BigInterger(String val) | 构造 | 将一个字符串变成BigInterger类型数据 |
2 | public BigInterger add(BigInterger val) | 普通 | 加法计算 |
3 | public BigInterger substract(BigInterger val) | 普通 | 减法计算 |
4 | public BigInterger multiply(BigInterger val) | 普通 | 乘法计算 |
5 | public BigInterger divideBigInterger val) | 普通 | 除法计算 |
6 | public BigInterger max(BigInterger val) | 普通 | 返回两个大数字中的最大值 |
7 | public BigInterger min(BigInterger val) | 普通 | 返回两个大数字的最小值 |
8 | public BigInteger[] divideAndRemainder(BigInterger val) | 普通 | 除法操作,数组的第一个元素为除法的商,第二个元素为除法的余数 |
BigDecimal
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public BigDecimal(double val) | 构造 | 将double表示形式转换为BigDecimal |
2 | public BigDecimal(int val) | 构造 | 将int表示形式转换为BigDecimal |
3 | public BigDecimal(String val) | 构造 | 将字符串表示形式转换为BigDecimal |
4 | public BigDecimal add(BigDecimal augend) | 普通 | 加法计算 |
5 | public BigDecimal subtract(BigDecimal subtrahend) | 普通 | 减法计算 |
6 | public BigDecimal multiply(BigDecimal multiplicand) | 普通 | 乘法计算 |
7 | public BigDecimal divide(BigDecimal divisor) | 普通 | 除法计算 |
8 | public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode) | 普通 | 除法计算设置保留下小数位与进位模式 |
Date日期处理类
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public Date() | 构造 | 实例化Date对象 |
2 | public Date(long date) | 构造 | 将数字变为Date类对象,long为日期时间数据 |
3 | public long getTime() | 普通 | 将当前的日期时间变为long型 |
SimpleDateForrmat日期格式化
正则表达式
Arrays数组操作类
import java.util.Arrays
public class JavaApIDemo{
public static void main(String[] args) throws Exception{
int dataA[] = new int[] {1,2,3};
int dataB[] = new int[] {1,2,3};
System.out.println(Arrays.compare(dataA,dataB));
System.out.println(Arrays.equals(dataA,dataB));
int data[]C = new int[10];
Arrays.fill(dataC,3); //内容填充
System.out.println(Arrays.toString(dataC)); //数组转为字符串输出
}
}
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static void sort(数据类型[] 变量) | 普通 | 数组排序 |
2 | public static int binarySearch(数据类型[] 变量,数据类型 key) | 普通 | 利用二分查找算法进行数据查询 |
3 | public static int compare(数据类型[] 变量,数据类型[] 变量) | 普通 | 比较两个数组的大小,返回3类结果:大于(1)、小于(-1)、等于(0) |
4 | public static boolean equals(数据类型[] 变量,数据类型[] 变量) | 普通 | 数组相等判断 |
5 | public static void fill(数据类型[] 变量,数据类型 变量) | 普通 | 数组填充 |
6 | public static String toString(数据类型[] 变量) | 普通 | 数组转为字符串 |
异常结构
以后慢慢遇到再补充吧!